40줄의 파일이 있습니다. 파일의 1, 9, 17, 25, 33행 등에 xyz1 문자열을 추가하려면 어떻게 해야 합니까?

40줄의 파일이 있습니다. 파일의 1, 9, 17, 25, 33행 등에 xyz1 문자열을 추가하려면 어떻게 해야 합니까?

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

관련 정보