awkを使用して配列のCSVファイルに列を追加する必要があります。
例えば、
input.csv
a,10
b,11
array = (100 200)
output.csv
次のようにする必要があります
a,10,100
b,11,200
このコマンドを試しましたが動作しません
awk -F"," 'BEGIN { OFS = "," } {for (x in array) $3=array[x]; print}' input.csv> output.csv
答え1
ぜひこれを使うべきですかawk
?このpaste
ユーティリティはまさにこの種の仕事のために設計されています。array
シェル配列を想定すると、次のようになります。
array=(100 200)
printf "%s\n" "${array[@]}" | paste -d, input.csv - > output.csv
printf
各配列メンバーを新しい行に入れるだけです。次に、カンマを区切り文字として使用して、paste
input.csvの入力行と-
(つまりパイプ出力)を貼り付けます。printf
配列がarray.txtなどの改行で区切られたファイルの場合:
100
200
それではもっと簡単です。
paste -d, input.csv array.txt > output.csv
答え2
問題は、シェル変数(配列を含む)がにあることです。オプションを通じて明示的に渡す必要がawk
あります。-v
また、配列全体を渡すことはできませんが、配列を単一の変数に入れて内部で分割することもできますawk
。
awk -va="$(echo "${array[@]}")" 'BEGIN{OFS=FS=","; split(a,b," ")}{print $0,b[NR]}' input.csv
これは、配列要素内にスペースがない限り機能します。