12

我有一些大型 CSV 文件,我想在其中提取包含模式“x”的 X 行和包含模式“y”的 Y 行之间的所有数据

例如:

other_data
Header
data
data
data
Footer
other_data

我希望能够将(包括)Header -> Footer 之间的所有内容通过管道传输到一个新文件。

谢谢!

4

4 回答 4

19

使用awk它非常简单:

awk '/Header/ { show=1 } show; /Footer/ { show=0 }'

基本上将状态保存在一个名为show. 当我们点击页眉时,我们将其打开,页脚我们将其关闭。当它打开时,该show规则会执行打印记录的默认操作。

于 2013-04-02T16:35:33.307 回答
19

在 sed 中非常简单:

sed -n '/Header/,/Footer/p'

或者

sed '/Header/,/Footer/!d'
于 2013-04-02T16:38:52.057 回答
11

另一种方式awk

awk '/Header/,/Footer/' file
Header
data
data
data
Footer

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

awk '/Header/,/Footer/' file > newfile
于 2013-04-02T16:49:08.980 回答
1

这可能对您有用(GNU sed):

 sed '/^Header/,/^Footer/w new_file' file
于 2013-04-02T18:56:49.910 回答