我有一个包含 40 行的文件“servers”。该文件如下所示:
- “server1”第 1 至 8 行
- “server2”第 9 至 16 行
- “server3”第 17 至 24 行
- “server4”第 25 至 32 行
- “server5”第 33 至 40 行
我需要附加:
- 字符串 xyz1 到文件中的第 1、9、17、25 和 33 行
- 字符串 xyz2 到第 2、10、18、26 和 34 行
- 字符串 pqr1 到第 3、11、19、27 和 35 行
- 字符串 pqr2 到第 4、12、20、28 和 36 行
- 字符串 pqr3 到第 5、13、21、29 和 37 行
- 字符串 pqr4 到第 6、14、22、30 和 38 行
- 字符串 pqr5 到第 7、15、23、31 和 39 行
- 字符串 pqr6 到文件中的第 8、16、24、32 和 40 行。
如何在 Linux 中实现上述目标?请告诉我。
答案1
我会使用 awk 使用模运算符作为条件来完成此操作。这仅适用于第一个字符串。其余的你可以遵循同样的想法。
awk -i inplace 'NR % 8 == 1 { print $0"xyz1"; next } { print }' infile
╰─ → $ cat -n infile
1 server1xyz1
2 server1
3 server1
4 server1
5 server1
6 server1
7 server1
8 server1
9 server2xyz1
10 server2
11 server2
12 server2
13 server2
14 server2
15 server2
16 server2
17 server3xyz1
18 server3
19 server3
20 server3
21 server3
22 server3
23 server3
24 server3
25 server4xyz1
26 server4
27 server4
28 server4
29 server4
30 server4
31 server4
32 server4
33 server5xyz1
34 server5
35 server5
36 server5
37 server5
38 server5
39 server5
40 server5
您可以添加该标志-v inplace::suffix=.bak
来创建备份文件,也可以删除该标志-i inplace
以查看打印输出。