Considere este arquivo:
#!/usr/bin/env bash
cat > example_file.txt <<EOL
|dms,wew,qwqw|
|m|head1|
|3,4,6|
|3e,2,23|
|m|head2|
|xw,12,2123|
|23,d,213|
|23,22q,2skl|
|m|head1|
|dljs,wqpw,2;a|
|dllw,w1p,1q;a|
EOL
De vez em quando, haverá um padrão de guarda: uma linha que começa com:
|m|
(sim, a primeira linha do arquivo não precisa ser um padrão de guarda) Agora eu só quero imprimir aquelas linhas para as quais o último padrão de guarda foi:
|m|head1|
e ignore todas as outras linhas. Em outros piores, eu gostaria que a saída fosse:
#!/usr/bin/env bash
cat > desired_result_file.txt <<EOL
|m|head1|
|3,4,6|
|3e,2,23|
|m|head1|
|dljs,wqpw,2;a|
|dllw,w1p,1q;a|
EOL
Orientado para Regex
ou orientado para o campo
p
é efetivamente um sinalizador de impressão.Os programas awk consistem em
pattern {action}
pares, nos quaisaction
é executado em um registro se forpattern
avaliado como verdadeiro (diferente de zero). Você pode omitirpattern
- nesse caso{action}
é avaliado para cada registro - ou omitir{action}
nesse caso o awk aplica o padrão padrão , que é imprimir o registro: o último é o que está acontecendo aqui.