我的两个示例文件如下所示:
F1
Red -
Blue -
Green -
F2
Yellow +
Pink +
ColorX +
我需要awk脚本根据$2 Field
打印第一行/最后一行(如果$2 == "+"
- 打印第一行; else
- 打印最后一行。
我设法编写打印第一行的awk脚本,但是如何添加else
以打印最后一行?
awk '{if (NR == 1 && $2 == "+") print}' F2
Yellow +
如何修改此代码以输入F1
并打印Green -
?
也许可以添加这样的内容:awk '{if (NR == 1 && $2 == "+") print ; else {END print} }'
答案 0 :(得分:2)
短hacky awk
awk 'NR==($2=="+"){exit}END{print}' file
如果第一行包含+
或最后一行
答案 1 :(得分:1)
要打印最后一行,您可以每次将其存储到变量中,然后在文件处理结束时打印最后一个值。您可以使用特殊模式/条件END
。
($2 == "-") { line = $0 }
END { if (line != "") print line }
答案 2 :(得分:1)
您可以使用END块获取它:
awk 'NR == 1 && $2 == "+" {print $0;} {l=$0;f=$2;} END{if (f == "-"){print l;}}' F1
我们将条件NR == 1 && $2 == "+"
保留在模式块(AWK
样式)中,而不是使用if语句。
然后你可以添加另一个保持整行(l变量)和第二个字段(f变量)的块,每个新行都覆盖每个变量。因此,在END块中,您将获得l
中最后一行的整行以及f
中最后一行的第二行。然后,您可以打印l
,具体取决于f
。
答案 3 :(得分:1)
awk 'NR == 1 && $2 == "+" { print ; p=1 ; exit }
END { if (p != 1) { print $0 } }' INPUTFILE
注意:这假设,如果第一行不包含'+'
,则必须打印最后一行。