在特定ID和renumerate ID列之前插入一行

时间:2013-10-15 20:31:32

标签: linux sed awk

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

示例

示例文件内容:

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

我想在ID#4之前插入MMM ...,即在行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

如果你可以帮我解决这个问题,那将是件好事。

2 个答案:

答案 0 :(得分:4)

一个选项可以是:

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

解释

  • /^4/ {print ++i, "MMM"}4开始在线,打印MMM并增加值。
  • /^[0-9]/ {$1=++i}在以number开头的行上,将第一个字段设置为增量值。
  • 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

答案 1 :(得分: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