awkを使用してCSVファイルに列を追加する

awkを使用してCSVファイルに列を追加する

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各配列メンバーを新しい行に入れるだけです。次に、カンマを区切り文字として使用して、pasteinput.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

これは、配列要素内にスペースがない限り機能します。

関連情報