awk if / else条件并打印最后一行

时间:2014-10-16 09:14:11

标签: awk

我的两个示例文件如下所示:

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} }'

4 个答案:

答案 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

注意:这假设,如果第一行不包含'+',则必须打印最后一行。