Como posso zerar um campo específico em um arquivo de texto?

2

Eu tenho um arquivo como este:

123123213,456,be
124243233,4346,ytr
123123123,436535,uytr
324234324,322,yt
234324323,32,tyutr

Eu quero zerar o campo do meio para dar o resultado:

123123213,00000456,be
124243233,00004346,ytr
123123123,00436535,uytr
324234324,00000322,yt
234324323,00000032,tyutr

Como faço um script que faça isso?

Eu vi um exemplo como este

awk '{ $6=sprintf("%06s", $6); print $0}'

mas eu realmente não entendo e, portanto, não consigo trabalhar.

    
por mattm123 25.10.2010 / 16:00

3 respostas

7

Tente isto:

awk -F , '{ printf "%i,%08i,%s\n" , $1 , $2 , $3 }' file
    
por 25.10.2010 / 16:15
1

Como você marcou sua pergunta [sed] , aqui está uma versão sed com base no script aqui .

sed 's/[^,][^,]*/\n0000000&/2;s/\n[^,]*\(.\{8\}\),/,/' inputfile

Explicação:

  • um campo consiste em um grupo de uma ou mais não-vírgulas: [^,][^,]* (isso também pode ser escrito como [^,]\+ )
  • substitua o segundo campo (correspondência) ( s///2 ) por uma nova linha, um monte de zeros e o conteúdo da correspondência: \n0000000& (a nova linha é usado para marcar o início do campo para a próxima etapa)
  • agora corresponde à nova linha, zero ou mais não-vírgulas e exatamente oito \{8\} de qualquer caractere (capturando esses caracteres \(\) ) seguidos por uma vírgula
  • substitua os caracteres capturados pela correspondência, isso remove a nova linha temporária e os zeros em excesso

A maneira como isso funciona é adicionar zeros em excesso no início do campo e depois cortar todos, exceto o

    
por 25.10.2010 / 20:37
0

o comando em sua pergunta está correto só precisa de alguma atualização.

awk '{ $6=sprintf("%0.8s", $6); print $0}'

também para alterar o uso do separador de campo de saída:

awk '{ OFS="\xE7"; $6=sprintf("%0.8s", $6); print $0}'

    
por 12.12.2017 / 11:58

Tags