Bash awk printf';副本';线

Bash awk printf';副本';线,bash,awk,sed,printf,gzip,Bash,Awk,Sed,Printf,Gzip,我正在尝试将一些文件合并到一个带有awk和printf的文件中 File1, File2 ... MergedFile 文件的内容有很多输入,但我感兴趣的是事件,例如 File1: ... event# 1 ... ... event# 2 ... 格式是特定的,我希望在根据事件编号修改后续文件中的所有事件时保留该格式 File2: event# 1 becomes event# 3 event# 2

我正在尝试将一些文件合并到一个带有awk和printf的文件中

File1, File2 ... MergedFile
文件的内容有很多输入,但我感兴趣的是事件,例如

File1:
...
event#          1 ...
...
event#          2 ...
格式是特定的,我希望在根据事件编号修改后续文件中的所有事件时保留该格式

File2:
event#          1 becomes event#          3
event#          2 becomes event#          4
...   
到目前为止,我设法做到这一点使用

awk -v nev="$NEV" '/event#/{printf "%6s %9u\n", $1, $2+=nev}1' input > output
其中NEV是每个文件的事件数

然而,我的问题是,这做了我希望它做的,但添加了一个重复的行,就像这样

      MergedFile:
        ...
        event#          1 ...
        event# 1...
        ...
        event#          2 ...
        event# 2...
        ...
        event#          3 ...
        event# 3...
        ...
        event#          4 ...
        event# 4...
        ...
有没有办法解决这个问题? 提前谢谢

编辑:问题已经解决。 性能是新问题。 我添加了
$1=event 35;
,但仍然很慢。有什么办法可以优化吗


此外还有空间问题,合并后的文件变得相当大,合并后我会将其压缩,但是我使用的磁盘可能没有足够的空间容纳未压缩的文件。

将1替换为
/事件#/
修复了该问题。
感谢@Wintermute

从代码末尾删除
1
。它会导致再次打印该行。您是正确的,但是删除1会删除包含事件的行之前和之后的所有其他文本#将其替换为
/事件#/
,然后。或者把
next
放在printf之后。我的意思是用
替换
1
/事件#/
。但是
printf
之后的
next
更好(重复性更少)。你们两个中的一个应该添加一个答案,这样这个问题才有价值@牧民,