AWK,致命:尝试访问字段-1

时间:2014-09-30 00:38:26

标签: bash awk

美好的一天,

当我尝试使用awk 'BEGIN { FS = "," } ; NF > 1 {print $(NF-1)}'时,我想知道如何让awk正确打印输入文件的结构。

预期输出

bogota
bogota
bogota
bogota
bogota



whitehouse stn

通过提议的尝试,我获得:

bogota
bogota
bogota
bogota
bogota
whitehouse stn

而且,如果我不使用NF > 1,我会收到此帖子标题中提到的错误。

提前感谢任何线索

2 个答案:

答案 0 :(得分:3)

如果我理解您的需求,您需要:

awk -F, '{print $(NF?NF-1:0)}'

如果有两个或多个字段,则会打印倒数第二个字段,否则打印整行。

说明:

括号内的表达式是标准?:三元运算符,其形式为condition ? value_if_true : value_if_false。在awk中,如果数值不是0,则数值(如NF)为真。

同样重要的是要知道在awk中,$是一个采用数字参数的一元运算符。如果$(i),则ith0 < i ≤ NF字段;整个行i == 0;如果i > NF,则为空字符串。 i的其他值是非法的。

答案 1 :(得分:2)

awk -F, '{print $(NF>1?NF-1:"")}' file