Substituir texto específico somente em campos específicos usando nawk

0

Meu arquivo de dados de entrada abc.txt tem isso

"20131008","0004","0568","98"

Eu executei este comando para substituir o texto

nawk -F, -vOFS=',' '{gsub("0568","0808",$3); print }' abc.txt

Na saída, o delimitador "," é substituído por um espaço. A saída é assim.

 "20131008" "0004" "0568" "98".

Alguém por favor pode ajudar com isso? Tentei substituir o -vOFS mas não funciona.

    
por user3213938 19.08.2014 / 03:15

3 respostas

1

Esta resposta demonstra awk e sed exemplos, tanto na saída da linha de comando quanto nas alterações de arquivo.

Para awk , usaremos $ awk -F"," '{gsub("0568", "0808", $3)}1' input.txt e receberemos a sequência alterada na saída da linha de comando (ou para variável), mas o arquivo original não será alterado.

$ cat input.txt 
"20131008","0004","0568","98"
$ awk -F"," '{gsub("0568", "0808", $3)}1' input.txt
"20131008" "0004" "0808" "98"

Para sed , usaremos o formulário simples sed -i 's/string to replace/new string/g' input.txt , em que -i flag é para alterações (isto é, modificação do arquivo original).

$ cat input.txt 
"20131008","0004","0568","98"
$ sed -i 's/0568/0808/g' input.txt
$ cat input.txt 
"20131008","0004","0808","98"

Embora não seja o que você pediu em nawk (eu não o tenho instalado), espero que seja útil.

    
por 19.08.2014 / 05:18
1

Eu não tenho nawk , mas isso funciona para mim (com gawk , usando a opção --posix ):

awk 'BEGIN{FS=OFS=","}{sub(/0568/,"0808",$3)}1' file

o comentário de fedorqui sugere talvez seja necessário usar -v OFS=',' em vez de -vOFS=',' , mas se o separador de entrada e saída for o mesmo, a atribuição no bloco BEGIN não será muito mais longa. Eu também mudei seu gsub para sub , pois parece que você está apenas procurando fazer uma substituição. O primeiro argumento para uma das funções é uma expressão regular, portanto você não deve passar uma string para ela.

Saída:

"20131008","0004","0808","98"
    
por 20.08.2014 / 00:32
-1

Eu tentei isso:

nawk 'BEGIN { FS=OFS="," } { sub("0568","0808",$3) }1' abc.txt

Funciona bem.

    
por 19.08.2014 / 03:20

Tags