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

awk if/else条件和打印最后一行,awk,Awk,我的两个示例文件如下所示: F1 F2 我需要awk脚本来打印第一行/最后一行,具体取决于$2字段(如果$2==“+”--打印第一行;否则--打印最后一行) 我设法编写了打印第一行的awk脚本,但如何添加else以打印最后一行呢 awk '{if (NR == 1 && $2 == "+") print}' F2 Yellow + 如何修改此代码以输入F1并打印绿色- 也许可以添加如下内容:awk'{if(NR==1&&$2==“+”)print;else{END print}

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

F1

F2

我需要awk脚本来打印第一行/最后一行,具体取决于
$2字段
(如果
$2==“+”
--打印第一行;
否则
--打印最后一行)

我设法编写了打印第一行的awk脚本,但如何添加
else
以打印最后一行呢

awk '{if (NR == 1 && $2 == "+") print}' F2
Yellow +
如何修改此代码以输入
F1
并打印
绿色-


也许可以添加如下内容:
awk'{if(NR==1&&$2==“+”)print;else{END print}}

要打印最后一行,每次只需将其存储到变量中,然后在文件处理结束时打印最后一个值。您可以使用一种特殊的模式/条件
END

($2 == "-") { line = $0                  }
END         { if (line != "") print line }

要打印最后一行,每次只需将其存储到变量中,然后在文件处理结束时打印最后一个值。您可以使用一种特殊的模式/条件
END

($2 == "-") { line = $0                  }
END         { if (line != "") print line }

您可以使用端块获得它:

awk 'NR == 1 && $2 == "+" {print $0;} {l=$0;f=$2;} END{if (f == "-"){print l;}}' F1
我们将条件
NR==1&&$2==“+”
保留在模式块(
AWK
style)中,而不是使用if语句


然后可以添加另一个块,使整行(l变量)和第二个字段(f变量)在每一新行中覆盖每个变量。因此,在结束块中,您将拥有
l
中最后一行的整行和
f
中最后一行的第二个字段。然后,您可以根据
f

的值打印
l
,您可以使用端块获得它:

awk 'NR == 1 && $2 == "+" {print $0;} {l=$0;f=$2;} END{if (f == "-"){print l;}}' F1
awk 'NR == 1 && $2 == "+" { print ; p=1 ; exit } 
     END { if (p != 1) { print $0 } }' INPUTFILE
我们将条件
NR==1&&$2==“+”
保留在模式块(
AWK
style)中,而不是使用if语句

然后可以添加另一个块,使整行(l变量)和第二个字段(f变量)在每一新行中覆盖每个变量。因此,在结束块中,您将拥有
l
中最后一行的整行和
f
中最后一行的第二个字段。然后,您可以根据
f
的值打印
l

awk 'NR == 1 && $2 == "+" { print ; p=1 ; exit } 
     END { if (p != 1) { print $0 } }' INPUTFILE
注意:这假设,如果第一行不包含
“+”
,则必须打印最后一行

注意:假设第一行不包含“+”,则必须打印最后一行。

Short hacky awk

awk 'NR==($2=="+"){exit}END{print}' file
如果第一行包含
+
或最后一行短的hacky awk,则将打印第一行

awk 'NR==($2=="+"){exit}END{print}' file
如果第一行包含
+
或最后一行,则将打印第一行