Alterar registros CSV seqüencialmente

0

Eu quero substituir o texto sequencialmente em um arquivo.

O conteúdo do arquivo é:

1,01-JUN-2016,ABC
2,01-JUN-2016,ABC
3,01-JUN-2016,ABC
4,01-JUN-2016,ABC
5,01-JUN-2016,ABC
6,02-JUN-2016,ABC
7,02-JUN-2016,ABC
8,02-JUN-2016,ABC
9,02-JUN-2016,ABC
10,02-JUN-2016,ABC
11,02-JUN-2016,ABC
12,02-JUN-2016,ABC
13,02-JUN-2016,ABC
14,02-JUN-2016,ABC

Eu quero que isso seja modificado conforme abaixo:

1,01-JUN-2016,ABC1
2,01-JUN-2016,ABC2
3,01-JUN-2016,ABC3
4,01-JUN-2016,ABC4
5,01-JUN-2016,ABC5
6,02-JUN-2016,ABC6
7,02-JUN-2016,ABC7
8,02-JUN-2016,ABC1
9,02-JUN-2016,ABC2
10,02-JUN-2016,ABC3
11,02-JUN-2016,ABC4
12,02-JUN-2016,ABC5
13,02-JUN-2016,ABC6
14,02-JUN-2016,ABC7
    
por Arvind 08.06.2016 / 08:32

3 respostas

1

usando o awk

awk '$0=$0 (NR-1)%7+1' file

ou

awk '{print (NR-1)%7+1}' file

Basicamente, a subtração 1 é começar no número zero.
O módulo 7 é loop de volta a cada sete linhas. O sinal de mais 1 é devido ao fato de que o 7 mod 7 é 0, o que não é o que queremos iniciar, queremos começar em 1, de modo que +1.

    
por 08.06.2016 / 09:04
0
$ awk -F, 'FNR < 8 { print $0$1 }; FNR > 7 {print $0($1-7)}' arvind.txt 
1,01-JUN-2016,ABC1
2,01-JUN-2016,ABC2
3,01-JUN-2016,ABC3
4,01-JUN-2016,ABC4
5,01-JUN-2016,ABC5
6,02-JUN-2016,ABC6
7,02-JUN-2016,ABC7
8,02-JUN-2016,ABC1
9,02-JUN-2016,ABC2
10,02-JUN-2016,ABC3
11,02-JUN-2016,ABC4
12,02-JUN-2016,ABC5
13,02-JUN-2016,ABC6
14,02-JUN-2016,ABC7

Para números de linha < 8, imprima a linha inteira seguida pelo primeiro campo. Para números de linha > 7, imprima a linha inteira seguida do valor do primeiro campo menos 7.

Note que FNR é o número de registros de entrada que awk viu no arquivo de entrada atual até o momento. FNR é uma variável interna awk . Ele tem nothing (além da co-incidência) para fazer com os valores que você tem no primeiro campo do seu arquivo de entrada.

BTW, se você executar isso com vários arquivos de entrada e desejar uma contagem de linhas cumulativa para todos os arquivos de entrada (em vez de uma contagem de linha separada para cada arquivo), use NR em vez de FNR .

    
por 08.06.2016 / 08:39
0

Tente isto:

awk -F, '$1 <=7 { print $0$1 }; $1 > 7 {print $0($1-7)}' filename
    
por 08.06.2016 / 09:01