我有一个文本文件,看起来像
file:/path/to/file
..
..
DA:34,0,0
DA:86,0,0
DA:87,0,0
..
DA:89,0,0
file:/path/to/file
..
DA:23,0,1
..
DA:24,0,1
DA:25,0,1
..
我只想将第一行以“DA”开头的行保留在以“file”开头的行之后。其他以“DA”开头的行必须删除。还有很多其他行(我用“..”标记了它们),它们也需要保留。
结果应如下所示:
file:/path/to/file
..
..
DA:34,0,0
..
file:/path/to/file
..
DA:23,0,1
..
..
有人可以帮我吗?我将非常感激。谢谢
最佳答案
这与 Printing with sed or awk a line following a matching pattern 密切相关.
你所追求的是:
awk '/^file/{f=1}(f&&/^DA/){f=0;print}!/^DA/' file
这是如何工作的?
/^file/{f=1}
:如果您找到以单词“file”开头的行,请将标记f
设置为1
(f&&/^DA/){f=0;print}
: 如果标志f
不为零,并且该行以DA
开头,则打印该行并将标志设置为零。这可确保您只打印file
之后的第一个DA
。!/^DA/
:打印所有不以DA
开头的行
较短的版本:
awk '/^file/{f=1}(f--&&/^DA/);!/^DA/' file
关于linux - 通过 Bash 更改 txt 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52833141/