按顺序更改 CSV 记录

按顺序更改 CSV 记录

我想按顺序替换文件中的文本。

该文件的内容是:

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

我希望将其修改如下:

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

答案1

使用 awk

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

或者

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

基本上减1是从数字0开始。
模 7 每七行循环一次。
加 1 是因为 7 mod 7 是 0,这不是我们想要开始的,我们想要从 1 开始,所以我们 +1。

答案2

$ 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

对于行号 < 8,打印整行,后跟第一个字段。对于行号 > 7,打印整行,后跟第一个字段的值减 7。

注意,是迄今为止在当前输入文件中看到的 FNR输入记录的数量。是一个内置变量。它有awkFNRawk没有什么(超越巧合)与输入文件第一个字段中的值有关。

顺便说一句,如果您使用多个输入文件运行此命令,并且您想要所有输入文件的累积行计数(而不是每个文件的单独行计数),请使用NR而不是FNR.

答案3

尝试这个:

awk -F, '$1 <=7 { print $0$1 }; $1 > 7 {print $0($1-7)}' filename

相关内容