40行を含む「servers」ファイルがあります。ファイルは次のようになります。
- "server1" ライン 1~8
- 「server2」ライン9~16
- 「server3」ライン17~24
- 「server4」ライン25~32
- 「server5」ライン33~40
以下を追加する必要があります。
- ファイルの行1、9、17、25、33にxyz1文字列を追加します。
- 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に文字列で連結します。
- ファイルの8、16、24、32、40行にpqr6文字列を追加します。
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
印刷物を表示できます。