Abordagem simplificada com awk
awk '/R1/ {print "=>" $0;next} /R2/{print "*" $0;next} 1' text.file
[jaypal:~/Temp] cat text.file
R1 12 324 3453 36 457 4 7 8
R2 34 2342 2525 25 25 26 26 2 2
R3 23 2342 32 52 54 543 643 63
R4 25 234 2342 4 234242
[jaypal:~/Temp] awk '/R1/ { print "=>" $0;next} /R2/{print "*" $0;next}1' text.file
=>R1 12 324 3453 36 457 4 7 8
*R2 34 2342 2525 25 25 26 26 2 2
R3 23 2342 32 52 54 543 643 63
R4 25 234 2342 4 234242
[jaypal:~/Temp]
Desvinculação do padrão {Action} Declarações:
-
/R1/ { print "=>" $0;next}
: Isso significa que as linhas com/R1/
da ação de impressão=>
serão feitas.next
significa que o resto das instruções do awk serão ignoradas e a próxima linha será analisada. -
/R2/{print "*" $0;next}
: Isso significa que as linhas correspondentes àpattern /R2/
da ação de impressão*
serão feitas. Quandoawk
do processamento for iniciado, a primeira instruçãopattern {action}
será ignorada, pois opattern /R1/
não será verdadeiro para as linhas que tiverem/R2/
. Então, a segunda declaraçãopattern {action}
será feita na linha.next
significaria novamente que não queremos mais processamento eawk
irá para a próxima linha. -
1
imprime todas as linhas. Quando apenas uma condição é fornecida sem{action}
, o awk usa como padrão{print}
. Aqui a condição é1
, que é interpretada como verdadeira, então sempre é bem-sucedida. Se chegarmos a este ponto, é porque o primeiro e o segundopattern {action}
foram ignorados ou ignorados (para linhas que não contêm/R1/
e/R2/
), então a ação de impressão padrão será feita para as linhas restantes.