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
인쇄물을 볼 수 있습니다.