仅打印第一个找到的匹配项

仅打印第一个找到的匹配项

我创建了一个语句,在每一行中搜索特定信息(在我的情况下是“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;}
'

相关内容