Adicionando números de linha repetidos

0

Eu tenho um arquivo com cerca de 10k linhas. Gostaria de adicionar os números de linha à primeira coluna, mas de forma a repetir os números de linha 1-100. Por exemplo,

1 12313
2 3434
.
.
.
100 4233
1 24523
.
.
.
100 4543543
1
.
.
.     
100

Como eu poderia fazer isso usando grep ou awk? Consegui imprimir os números de linha, mas sem repetir usando o awk

awk '{ print NR, $1 }' p2.dat > p3.dat
    
por user5694985 12.10.2016 / 12:45

2 respostas

1

Use o operador de módulo (restante) % on NR . NR % 100 daria 1,2,3 ... 99,0,1,2 ..., então precisa de alguns ajustes. Isso deve fazer:

awk '{ print (NR-1) % 100 + 1, $1 }' p2.dat > p3.dat

Isso, é claro, é uma resposta para a pergunta original, não a modificada.

    
por 12.10.2016 / 13:04
0

Isso parece funcionar com um mínimo de loop:

awk '{ printf("%0.0f ",(NR/100.001)+.5) ;print $1 }' p2.dat > p3.dat

Demo, imprima os primeiros 10 números e em grupos de 3 prefixo um incremento:

seq 10 | awk '{ printf("%0.0f ",(NR/3.001)+.5) ;print $1 }'

Saída:

1 1
1 2
1 3
2 4
2 5
2 6
3 7
3 8
3 9
4 10

Nota: awk arredondamento mostra alguns problemas de conversão binários. O código acima usa expressões como (NR/3.001)+.5) , quando seria mais claro escrever (NR/3)+.5) ou mesmo (NR*(1/3))+.5) . Infelizmente, esses não funcionam:

# WRONG: (rounding errors), shows four '2's, etc.
seq 10  | awk '{ printf("%0.0f ",(NR/3)+.5) ;print $1 }' 
1 1
1 2
2 3
2 4
2 5
2 6
3 7
3 8
4 9
4 10
    
por 12.10.2016 / 16:45