Использование 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: многострочная замена блока конфигурации
  • Как пропустить файл в sed, если он содержит регулярное выражение?
  • Есть ли простой способ сделать эквивалент `sed ...` заменяя одну и ту же строку несколькими значениями?
  • Обработка текста. Создание файла slurm topology.conf из вывода ibnetdiscover.
  • Найдите строку (например, grep -q) только в одном разделе файла
  • Извлечь имя группы из `id` и сохранить ее в переменной
  • Поведение POSIX привязок sed и $ regex с многострочными пространствами шаблонов
  • Как извлечь данные из файла и построить имя файла из одного из значений
  • Выберите строки, начинающиеся с определенных номеров
  • Можно ли изменить файл yml с помощью сценария оболочки?
  • оценивать несколько шаблонов из вывода программы и записывать в определенные шаблоны файлы
  • Interesting Posts

    Использование grep в инструкции if-else

    bash: как мне записать содержимое, закодированное в base64, в файл на указанную строку

    Как заставить rpm и yum терпеть неудачу, если отсутствует подпись GPG или в противном случае не может быть проверена?

    Требуется больше места на диске для root

    Код работает вручную на терминале, но не может запускать скрипт

    Проверьте, подключены ли клавиатура и мышь

    Функция zsh: достигается максимальный уровень вложенных функций

    быстро измените следующие несколько строк в vim?

    Перечислите переменные с префиксом, где префикс хранится в другой переменной

    Основной скрипт в Angstrom Linux работает на Beaglebone Black

    Проверка пароля AIX для root из скрипта

    Хранение списка в переменной

    Как вернуть команду chown?

    Список разрешений пользователя для определенной папки

    Некоторые комбинации клавиш недоступны для пользовательских приложений

    Linux и Unix - лучшая ОС в мире.