Использование CSV-строки в качестве параметров команды

У меня есть файл CSV, например:

Name,Age,Address Daniel Dvorkin,28,Some Address St. 1234 (... N ...) Foo Bar,90,Other Address Av. 3210 

И у меня есть команда, которая принимает эти параметры:

 ./mycommand --name="Daniel Dvorkin" --age=28 --address="Some Address St. 1234" 

Какой самый простой способ запустить mycommand для каждой строки CSV?

3 Solutions collect form web for “Использование CSV-строки в качестве параметров команды”

Это довольно легко:

 sed '1d;s/\([^,]*\),\([^,]*\),\([^,]*\)/.\/mycommand --name="\1" --age="\2" --address="\3"/e' file.csv 

1d удалит строку надписи. команда s изменит строку, как в вашем примере e в конце s команда выполнит строку. это расширение GNU, поэтому, если у вас нет GNU sed, вы можете использовать xargs вместо e :

 sed '1d;s/\([^,]*\),\([^,]*\),\([^,]*\)/.\/mycommand --name="\1" --age="\2" --address="\3"/' file.csv | xargs 

Если ваш CSV – это простой CSV без механизма цитирования (поэтому запятые не могут появляться в поле), вы можете провести синтаксический разбор в оболочке.

 { read line # ignore the header line IFS=, while read -r name age address; do ./mycommand --name="$name" --age="$age" --address="$address" done } <input.csv 

Если поля могут быть указаны, вам нужен настоящий синтаксический анализатор CSV. Используйте Perl, Python, R , Ruby или другие языки.

Помимо sed, есть awk …

 awk -F, 'NR > 1 { system("./mycommand --name=\\\"" $1 "\\\" --age=" $2 " --address=\\\"" $3 "\\\"") }' < file.csv 
  • Как сгладить журналы для списка шаблонов и сделать из него отчет?
  • «Sed» переписать файл для отображения целых чисел и удалить оставшиеся символы
  • Как «grep» для длины строки * not * в заданном диапазоне?
  • Как удалить все числа, окруженные <>
  • оптимизировать команду с помощью or или pipe для анализа вывода ifconfig
  • array выводит все испорченные?
  • Зацикливание файлов с пробелами в именах?
  • метки тега sed
  • Как я могу извлечь числа в файле с помощью sed или любого другого инструмента?
  • Grep для строки, а затем повторить строку из записи
  • Проблема удаления / замены специального символа °
  • Linux и Unix - лучшая ОС в мире.