我使用命令
varioutput=$(awk '{print $j}' OFS=, data/damper.test_temp1.csv)
因为我想提取由 , 分隔的一行许多值的第 j 个值。但是当我想使用 $varioutput 时,它总是给我整行。
我究竟做错了什么?
其实我想用
for ((j=1; j<=20; j++)); do
varioutput=$(awk -F, -v jj="$j" '{print $jj}' data/damper.test_temp1.csv)
done
所以我现在很困惑我是否应该像上面那样使用它?我收到错误,但是当我像这样使用它时
for ((j=1; j<=20; j++)); do
varioutput=$(awk -F, '{print $j}' data/damper.test_temp1.csv)
done
我仍然明白这条线。
现在解决方案如下
for ((j=1; j<=20; j++)); do
varioutput=$(awk -F, -v k=$j '{print $k}' data/damper.test_temp1.csv)
done
答案1
您指定的是输出字段分隔符,而不是输入字段分隔符;使用这个代替:
varioutput=$(awk -F, '{print $j}' data/damper.test_temp1.csv)
(或设置FS
而不是OFS
)。
我还假设j
上面是一个占位符,并且您将其静态替换为适当的值(例如,print $4
)。
要使用脚本中的另一个变量,您必须将其传递给awk
例如,对于RANK
shell 中的变量
varioutput=$(awk -F, -v j=$RANK '{print $j}' data/damper.test_temp1.csv)
一般来说,如果您像本例一样开始对一小部分脚本使用 AWK,那么最好对更多脚本使用 AWK。