Использование 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, если он содержит регулярное выражение?
  • Как использовать регулярное выражение с AWK для замены строки?
  • Каким образом можно фильтровать текстовый файл для удаления пустых строк?
  • Найти и заменить с помощью sed с помощью подстановочных знаков при поиске и замене
  • команда bash, которая выводит результат предыдущего канала
  • Почему «while .. read .. << EOL» выполняет расширение переменной, но <файл и | не?
  • Извлечение нескольких экземпляров текста между двумя словами, включая стартовое слово, но исключающее слово
  • Как извлечь первое целое из текстовой строки в столбце файла с разделителями табуляции?
  • Добавление строки в файл из удаленного ssh
  • Как найти строку после регулярного выражения в одной строке текста?
  • Искать текст в Linux, но не отображать полную строку в результатах
  • Linux и Unix - лучшая ОС в мире.