$ awk '/via/{$0="via" ++n};1' file
via1
via2
via3
via4
via5
via6
p0584_62284
via7
Como funciona
-
/via/{$0="via" ++n}
Se a linha contiver
via
, substitua por "via" seguido porn
. O++
principal faz com quen
seja incrementado antes de cada vez que isso é feito.$0
é como o awk se refere à linha como um todo. -
1
Esta é uma abreviada enigmática do awk para imprimir a linha.
Em detalhes,
1
é uma condição e é avaliada como verdadeira. Como nenhuma ação é especificada, é executada a ação padrão que é imprimir a linha:print $0
. Assim, um único1
é uma forma abreviada de imprimir a linha.
Abordagem mais seletiva
É possível que as três letras via
apareçam nas linhas que não queremos alterar? Se assim for, devemos ser mais seletivos sobre quais linhas nós mudamos. Se quisermos alterar apenas as linhas que começam com via
e nas quais via
é seguido apenas por números, então, como sugerido por NeronLeVelu nos comentários, devemos usar um regex mais restritivo, como ^via[0-9]+$
. Nesse caso:
awk '/^via[0-9]+$/{$0="via" ++n};1' file