O next
comando em awk
irá:
Pare de processar o registro de entrada atual. Leia o próximo registro de entrada e comece o processamento com o primeiro padrão no programa AWK. Ao chegar ao final dos dados de entrada, execute qualquer(s) regra(s) END.
Suponha que meu script Perl seja uma lista de regras de transformação. Existe algo em Perl que possa simulá-lo, como se eu codificasse:
s/a/A/g;
s/b/B/g; next();
s/c/C/g;
o next?()
irá verificar se uma determinada substituição foi bem-sucedida, então interromperá o processamento do restante das regras de transformação e, em vez disso, recomeçará a partir do primeiro padrão das regras de transformação.
Qual é a melhor maneira de conseguir isso?
Entrada de exemplo:
R: waltz
M: 3/4
L: 1/4
K: C
|: E2"C"G | d3"G7" | c2"C"G | F3"F" | E2"C"E | EFG | A3"Dm" | G3"G7" |
| E2"C"G | d3"G7" | c2"C"G | F3"F" | E2"C"G | G"G7"AB | c3"C"- | c3 ||
||d"G7" z/G/ G | BAG | E2"C"G | c3 | A2"F"c | d2"D"c | B3"G" | G3 |
| E2"C"G | d3"G7" | c2"C"G | F3"F" | E2"C"G | G"G7"AB c3"C" | c3 :|
As notas ABC, como E2
G
, d3
são tratadas/substituídas por último (em um while /re/gi
loop), enquanto os acordes de guitarra, "C" "Dm" "G7"
etc., são substituídos primeiro e depois pulam a substituição das notas ABC. Tentei usar next if s/".*?"/^$&/g;
para substituir a parte dos acordes da guitarra, mas todas as substituições das notas ABC foram ignoradas, o loop while posterior não foi alcançado.
O que eu faria como uma linha:
Isso irá pular os números pares e imprimir os números ímpares.
Eu não sou
perl
-ninja, mas se você tiver uma solução funcionando em determinado idioma e quiser converter para outro, poderá encontrar um transpilador para isso. Consegui desvendar a existência dea2p
, o que consegui fazendosudo cpanm -S App::a2p
, então crieiprogram.awk
com base no seu exemplo, ou seja,como
gsub
funçãoserá o mesmo que perguntar se alguma substituição foi feita ao usar como padrão. Observe que ele não imprimirá linhas
b
conforme o GNUAWK
é instruído anext
alinhar, antes de serprint
editado. Então eu convoqueia2p
o seguinte caminhoconteúdo de
program.pl
éEu testei usando
file.txt
o seguinte conteúdofazendo
e obtendo o resultado esperado, ou seja
(testado usando perl 5, versão 34, subversão 0)