使用 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是一个shell数组:

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

问题是 shell 变量(包括数组)在awk.您需要通过-v选项显式传递它们。此外,您不能传递整个数组,但您可以将数组放入单个变量中并将其拆分在内部awk

awk -va="$(echo "${array[@]}")" 'BEGIN{OFS=FS=","; split(a,b," ")}{print $0,b[NR]}' input.csv

只要数组元素内没有空格,这就会起作用。

相关内容