awk 将值保存为变量

awk 将值保存为变量

我使用命令

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

例如,对于RANKshell 中的变量

varioutput=$(awk -F, -v j=$RANK '{print $j}' data/damper.test_temp1.csv)

一般来说,如果您像本例一样开始对一小部分脚本使用 AWK,那么最好对更多脚本使用 AWK。

相关内容