Substitua um campo por outro se a entrada começar com uma letra específica

2

Se eu tiver um arquivo como:

223 898 teeth
223 899 mouth
223 900 r9
445 800 round

Minha pergunta é como posso usar o comando awk para substituir a coluna 2 pela coluna 3, somente para a linha na qual a coluna 3 inicia a letra 'r'? Para substituição, eu posso usar o gsub, mas não consigo acessar apenas a linha cuja coluna três começa com 'r'.

Eu também tentei usar o grep para encontrar palavras começando com r usando:

grep "r*" filename | awk '{gsub($2,$3); print;}'

Mas este comando substitui a coluna 2 por todas as colunas dessa linha.

    
por riccha 20.09.2014 / 22:51

1 resposta

2

Tente:

$ awk '$3 ~ /^r/ {$2 = $3}1' file
223 898 teeth
223 899 mouth
223 r9 r9
445 round round

Isso combina a pesquisa e a impressão em um único comando awk , em vez de usar grep & %código%. O awk acima encontrará apenas as linhas em que o 3º campo começa com $3 ~ /^r/ . Nessas situações, r substituirá o 3º campo pelo 2º campo.

Se você ficou confuso com o% trailing awk , está fazendo o seguinte. Ele é avaliado como verdadeiro, fazendo com que 1 execute sua operação padrão, awk .

Referências

por 20.09.2014 / 22:55

Tags