Sed/Awk - 在模式x和y之间拉线

Num*_*pty 12 bash awk sed

我有一些大的CSV文件,我想提取包含模式'x'的第X行和包含模式'y'的第Y行之间的所有数据

例如:

other_data
Header
data
data
data
Footer
other_data
Run Code Online (Sandbox Code Playgroud)

我希望能够管理(和包括)Header - > Footer之间的所有内容到一个新文件.

谢谢!

Bet*_*eta 19

它在sed中非常简单:

sed -n '/Header/,/Footer/p'
Run Code Online (Sandbox Code Playgroud)

要么

sed '/Header/,/Footer/!d'
Run Code Online (Sandbox Code Playgroud)


Fat*_*ror 18

使用awk它非常简单:

awk '/Header/ { show=1 } show; /Footer/ { show=0 }'
Run Code Online (Sandbox Code Playgroud)

基本上将状态保存在名为的变量中show.当我们点击Header时我们将其打开,Footer我们将其关闭.当它打开时,show规则执行打印记录的默认操作.

  • +1这是正确的答案,因为它很容易被增强,以涵盖您想要打印第一行或最后一行或两行或您想要做的任何其他事情的情况.使用/ start /,/ end/range的解决方案虽然稍微简短,但在最轻微的需求变化时会崩溃 - 这种模式使得解决微不足道的问题变得更加简单但解决非平凡的问题更加冗长和复杂或者需要重新写入这种风格. (3认同)

Chr*_*our 11

另一种方式awk:

awk '/Header/,/Footer/' file
Header
data
data
data
Footer
Run Code Online (Sandbox Code Playgroud)

只需重定向输出以保存在新文件中:

awk '/Header/,/Footer/' file > newfile
Run Code Online (Sandbox Code Playgroud)