我有一个有 40 行的文件。如何将字符串 xyz1 附加到文件中的第 1、9、17、25 和 33 行,依此类推?

我有一个有 40 行的文件。如何将字符串 xyz1 附加到文件中的第 1、9、17、25 和 33 行,依此类推?

我有一个包含 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以查看打印输出。

相关内容