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

时间:2015-02-02 02:38:50

标签: bash awk gawk

我正努力解决这个问题。

./ analyze.sh 9

内部脚本:

lField=$1 (Command line argument)

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

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

由于

2 个答案:

答案 0 :(得分:1)

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被视为$0,因此它会打印整行。第二种情况lField已正确设置为2,因此仅打印第二列B

答案 1 :(得分:0)

如果你坚持做这样的事情

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