如何使用 "awk" 命令检索特定字段,但字段编号在运行时给出?

How to use "awk" command to retrieve particular field, but the field number is given in runtime?

我正在努力解决这个问题。

./analyze.sh 9

内部脚本:

lField= (Command line argument)

cat "$(pwd)/results1/DSFTPTCPstats.6" | awk '{ print $lField }'

我想要第 9 个字段的值,但它不起作用。在 'print' 部分尝试了不同的组合,无法解决...真的很有帮助。

谢谢

Shell环境变量不是awk环境变量:

您可以使用 -v 标志将一个变成另一个:

pax> a=1;b=2;awk -vb=$b 'END{print a;print b}' </dev/null

2

在您的特定情况下,此代码段可能显示得更好:

pax> lField=2;echo "A B C" | awk '{print $lField}'
A B C

pax> lField=2;echo "A B C" | awk -vlField=$lField '{print $lField}'
B

在第一种情况下,$lField 被视为 [=15=],因此它会打印整行。第二种情况 lField 正确设置为 2 所以它只打印第二列 B.

如果你坚持要这样做

awk "{print "$"${lField}}"