我需要使用 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
只要数组元素内没有空格,这就会起作用。