awk '{
if (/\<AAA\>/ && /\<BBB\>/ && /\<CCC\>/)
print
else
print "N/A"
}'
\<
e \>
são expressões de limite de palavras.
Eu criei uma declaração que está procurando por informações específicas em cada linha (no meu caso "AAA", "BBB" ou "CCC"), se não houver essa informação N / A é impressa
{ k=0; for (i=1;i<=NF;i++) if ($i=="AAA") {print $i; k++}
else if ($i=="BBB") {print $i; k++}
else if ($i=="CCC") {print $i; k++}
if(k==0) print "N/A"}
O problema aparece quando há dois ou mais "AAA" na mesma linha. Ele me imprime todos os encontrados AAA e gostaria de parar de procurar após a primeira descoberta.
Além disso, gostaria de parar de verificar outras declarações (para BBB ou CCC) quando a contenção AAA é verdadeira.
Por exemplo, digamos que eu tenha uma entrada assim:
first imput line has AAA
second line has AAA and AAA
third line has BBB and
fourth line has CCC
fifth line has AAA and CCC
last line
na saída que eu quero:
AAA #(from first line)
AAA #(from second line, but only first found, I don't want two AAA to be printed)
BBB
CCC
AAA #(it found AAA and stop checking condition for CCC)
N/A #(no AAA or BBB or CCC in this line)
Atenciosamente, lucas
awk '{
if (/\<AAA\>/ && /\<BBB\>/ && /\<CCC\>/)
print
else
print "N/A"
}'
\<
e \>
são expressões de limite de palavras.
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;}
'
Tags awk