我想按顺序替换文件中的文本。
该文件的内容是:
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
输入记录的数量。是一个内置变量。它有awk
FNR
awk
没有什么(超越巧合)与输入文件第一个字段中的值有关。
顺便说一句,如果您使用多个输入文件运行此命令,并且您想要所有输入文件的累积行计数(而不是每个文件的单独行计数),请使用NR
而不是FNR
.
答案3
尝试这个:
awk -F, '$1 <=7 { print $0$1 }; $1 > 7 {print $0($1-7)}' filename