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印刷物を表示できます。

関連情報