次の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"
最も簡単に走る方法は?私の注文CSVの各行について?
答え1
これはとても簡単です。
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
答え2
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パーサーが必要です。使用パール、Python、R、Rubyまたは他の言語。
答え3
sedに加えて、以下があります。アッ...
awk -F, 'NR > 1 { system("./mycommand --name=\\\"" $1 "\\\" --age=" $2 " --address=\\\"" $3 "\\\"") }' < file.csv