Intereting Posts
Почему git сохраняет мою SSH-идентификацию в gnome, но не KDE? Можно ли запустить экземпляр shellshock для запуска команды в качестве привилегированного пользователя? Выбор программного обеспечения Linux Distro и Media Server Solaris: как запустить системную команду поверх awk и объединить весь вывод в одной строке Преобразование одного (длинного) столбца в несколько (коротких) столбцов с неравными длинами Учетные записи Баш: декретирующая американская дата на 1 день mmddyyyy Как вернуться из «сохранить локальную версию в настоящее время» во время обновления Grub? Как можно контролировать поток ввода-вывода в определенном каталоге или файле Linux для чтения / записи байт? Как предотвратить cp от слияния двух одинаково названных каталогов? Запустите приложение с подсказками декоратора окна, координатами x / y, размером и т. Д. восстановить lvm форматированный раздел Монетный двор 12: я не могу открыть диспетчер синаптических пакетов Неграфические tty не растягивают полный экран Как просмотреть общую библиотеку iTunes из Linux Banshee?

Чтобы передать параметр с помощью sed

Для моего скрипта я должен прочитать данные из файла.

Например, у меня есть 2 файла: один – текстовый файл, второй – файл csv с 10 столбцами.

Я пытаюсь читать csv и изменять параметры в первом файле.

  1. Использование sed -n для чтения данных по одной строке за раз и сохранить это в fileC
  2. Используя 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 

Примеры данных CSV

 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