Tente isto:
awk -F , '{ printf "%i,%08i,%s\n" , $1 , $2 , $3 }' file
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.
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:
[^,][^,]*
(isso também pode ser escrito como [^,]\+
) 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) \{8\}
de qualquer caractere (capturando esses caracteres \(\)
) seguidos por uma vírgula
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
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}'