Outra abordagem awk
.
awk -F'[0-9]+' '{printf("%05d%s\n",NR,$2)}' infile >newfile
Eu tenho um arquivo de entrada com os dados abaixo, como posso convertê-lo para o arquivo de saída abaixo mencionado.
Arquivo de entrada
00001abc
00002def
00003ghi
00001jkl
00002mno
00003pqr
00001stu
00002vwx
00003yza
00004bcd
Arquivo de saída
00001abc
00002def
00003ghi
00004jkl
00005mno
00006pqr
00007stu
00008vwx
00009yza
00010bcd
Outra abordagem awk
.
awk -F'[0-9]+' '{printf("%05d%s\n",NR,$2)}' infile >newfile
tente
awk '{ printf "%05d%s\n",NR,substr($1,6)}' input_file > output_file
onde
printf "%05d" .. NR
irá mostrar o número da linha ( NR
(Number of record)) preenchido com 0 substr($1,6)
extrairá substring de $1
(primeiro argumento) a partir de 6 Usando sed
para excluir os dígitos existentes do início de cada linha e nl
para numerar as linhas da maneira específica:
$ sed 's/^[0-9]*//' file | nl -n rz -s '' -w 5
00001abc
00002def
00003ghi
00004jkl
00005mno
00006pqr
00007stu
00008vwx
00009yza
00010bcd
As opções nl
solicitam números com preenchimento zero ( -n rz
, que também justifica os números à direita, mas isso não é importante aqui) sem delimitador entre os números de linha e os dados ( -s ''
). Os números têm cinco dígitos de largura ( -w 5
).
nl
é um utilitário POSIX .
Com sh
while read a;do i=$((i+1));printf "%05d%s\n" $i "${a##*[0-9]}";done < infile > outfile
substituição local
printf '%s\n' $(while read a;do i=$((i+1));printf "%05d%s\n" $i "${a##*[0-9]}";done < infile) > infile
Tags text-processing numbering