Для моего скрипта я должен прочитать данные из файла.
Например, у меня есть 2 файла: один – текстовый файл, второй – файл csv с 10 столбцами.
Я пытаюсь читать csv и изменять параметры в первом файле.
sed -n
для чтения данных по одной строке за раз и сохранить это в fileC
sed "s/&replacefile1param/&readFileC/g"
Что я имею, так это прочитать cat
readFileC
как параметр на втором этапе. Как я могу это сделать?
Первый файл – это пример файла сценария с двумя параметрами внутри. Второй файл представляет собой файл CSV с 200 строками с 6 столбцами.
Мне нужно изменить файл шаблона, читая столбцы из CSV и подставляя параметры. Результат должен быть 200 файлов1, и каждый результат должен быть сохранен в местоположении, указанном в четвертом столбце CSV.
The name =scriptname The staments go here job name = jobname exit
scriptname,jobname,date,location,updated,env kkkkkk,filetest,2001-01-01,/san00/project,test kkkkk2,filetest2,2001-01-01,/san00/project,test kkkkk3,filetest3,2001-01-01,/san00/project2,real
Мне нужно заменить параметры в файле шаблона значениями, взятыми из CSV, и сохранить файл в местоположении /san00
из 4-го столбца CSV.
The script name kkkkkk The staments go here job name = filetest exit
Это должно быть сохранено в san00/project
.
file1
– это шаблон и file2
csv. Что произойдет, если две строки имеют одно и то же местоположение, не определено, решение ниже перезаписывает файл местоположения с последними данными. Мне также непонятно, является ли /san00
единственным, используемым в части местоположения, и если он должен быть абсолютным путем.
Решение, создающее местоположения по отношению к текущему каталогу (обратите внимание на расположение .$dir
и .$location
).
while IFS=, read scriptname jobname date location updated env; do dir=$(dirname $location) [ -d .$dir ] || mkdir -p ".$dir" sed -e "s/scriptname/$scriptname/" \ -e "s/jobname/$jobname/" file1 > ".$location" done < <(tail -n +2 file2)
Решение с абсолютными путями в местоположении, целевые каталоги должны существовать заранее
while IFS=, read scriptname jobname date location updated env; do sed -e "s/scriptname/$scriptname/" \ -e "s/jobname/$jobname/" file1 > "$location" done < <(tail -n +2 file2)
Существует много способов извлечь информацию из file2
, но это один из них, и в зависимости от характера данных он может быть более сложным.
Это может сработать для вас:
sed '1d;s|\([^,]*\),\([^,]*\),[^,]*,\([^,]*\).*|sed "1s/scriptname/\1/;5s/jobname/\2/" template >\3|' file.csv | sh