Como substituir e gerar o número da linha

1

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
    
por Imran Aziz Khan 06.04.2018 / 13:08

4 respostas

3

Outra abordagem awk .

awk -F'[0-9]+' '{printf("%05d%s\n",NR,$2)}' infile >newfile
    
por 06.04.2018 / 13:42
1

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
por 06.04.2018 / 13:30
1

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 .

    
por 06.04.2018 / 13:53
0

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
    
por 07.04.2018 / 13:10