1

一个文件包含 ID、Name 和其他列。我想在特定 ID 之前插入包含名称和详细信息的行。然后应使用正确的 ID 序列更新 ID 列。

例子

示例文件内容:

Header1
Header2
1 AAA ...
2 BBB ...
3 CCC ...
4 XXX ...
5 YYY ...
6 ZZZ ...
Footer

我想MMM ...在 ID #4 之前插入,即在一行之前4 XXX ...

期望的输出:

Header1
Header2
1 AAA ...
2 BBB ...
3 CCC ...
4 MMM ...
5 XXX ...
6 YYY ...
7 ZZZ ...
Footer

我可以使用以下命令进行正确插入,但不确定如何使用正确编号更新 ID 列。

sed '/^\s*4/ i 4 MMM ...' file

如果您能帮我解决这个问题,那将是不胜感激的。

4

2 回答 2

4

一种选择可以是:

awk '/^4/ {print ++i, "MMM"} /^[0-9]/ {$1=++i} 1' file

解释

  • /^4/ {print ++i, "MMM"}从 开始在线,以增量值4打印。MMM
  • /^[0-9]/ {$1=++i}在以数字开头的行上,将第一个字段设置为增量值。
  • 1打印线

测试

$ awk '/^4/ {print ++i, "MMM"} /^[0-9]/ {$1=++i} 1' file
Header1
Header2
1 AAA ...
2 BBB ...
3 CCC ...
4 MMM
5 XXX ...
6 YYY ...
7 ZZZ ...
Footer
于 2013-10-15T20:34:16.540 回答
2
$ awk '/^4 /{print "4 MMM ..."; inc=1} /^[[:digit:]]/{$1+=inc} 1' file
Header1
Header2
1 AAA ...
2 BBB ...
3 CCC ...
4 MMM ...
5 XXX ...
6 YYY ...
7 ZZZ ...
Footer
于 2013-10-15T20:37:16.157 回答