我创建了一个语句,在每一行中搜索特定信息(在我的情况下是“AAA”,“BBB”或“CCC”),如果没有这样的信息,则打印N / A
{ k=0; 对于 (i=1;i<=NF;i++) 如果 ($i=="AAA") {打印 $i; k++}
否则,如果 ($i=="BBB") {打印 $i; k++}
否则,如果 ($i=="CCC") {打印 $i; k++}
如果(k == 0)打印“N/A”}
当同一行有两个或多个“AAA”时,就会出现问题。它会打印出所有找到的 AAA,我想在找到第一个 AAA 后停止搜索。
此外,当 AAA 条件为真时,我想停止检查其他语句(对于 BBB 或 CCC)。
例如,假设我有这样的输入:
第一个输入线有AAA
第二行有 AAA 和 AAA
第三行有 BBB 和
第四行有CCC
第五行有 AAA 和 CCC
最后一行
在我想要的输出中:
AAA #(从第一行开始)
AAA #(从第二行开始,但只找到第一个,我不希望打印两个 AAA)
血脑屏障
CCC
AAA #(发现 AAA 并停止检查 CCC 条件)
N/A #(此行中没有 AAA 或 BBB 或 CCC)
问候,卢卡斯
答案1
awk '{
if (/\<AAA\>/ && /\<BBB\>/ && /\<CCC\>/)
print
else
print "N/A"
}'
\<
和\>
是词边界表达式。
答案2
awk '
/\<AAA\>/ {print "AAA"; naflag = 1;}
/\<BBB\>/ {print "BBB"; naflag = 1;}
/\<CCC\>/ {if(cflag == 0) {print "CCC"; naflag = 1; cflag = 1;}}
{if(naflag == 0) print "N/A"; naflag = 0;}
'