我有一个相当大的输出文本文件,需要删除两个模式之间的所有行,但保留模式匹配。
文件大致看起来像以下输出。
TEST #1
coef1 | 48.36895 3.32013 14.57 0.000 41.86141 54.87649
coef2 | -50.08894 10.47335 -4.78 0.000 -70.61697 -29.56092
|
indicator |
0 | .6647992 2.646627 0.25 0.802 -4.55925 5.888849
1 | 2.118701 5.225777 0.41 0.686 -8.19621 12.43361
|
year |
2 | -.4324005 2.231387 -0.19 0.847 -4.836829 3.972028
3 | -.362762 1.97184 -0.18 0.854 -4.254882 3.529358
|
_cons | 16.95753 6.342342 2.67 0.008 4.526383 29.38869
TEST #2
coef2 | 48.36895 3.32013 14.57 0.000 41.86141 54.87649
coef3 | -50.08894 10.47335 -4.78 0.000 -70.61697 -29.56092
|
year |
4 | .6647992 2.646627 0.25 0.802 -4.55925 5.888849
5 | 2.118701 5.225777 0.41 0.686 -8.19621 12.43361
|
idnumber |
6 | -.4324005 2.231387 -0.19 0.847 -4.836829 3.972028
7 | -.362762 1.97184 -0.18 0.854 -4.254882 3.529358
|
_cons | 16.95753 6.342342 2.67 0.008 4.526383 29.38869
我需要取出以下输出,并删除所有在"year"和"_cons"之间的行,但我需要保留以"_cons"开头的行。期望的输出应该像这样: TEST #1
coef1 | 48.36895 3.32013 14.57 0.000 41.86141 54.87649
coef2 | -50.08894 10.47335 -4.78 0.000 -70.61697 -29.56092
|
indicator |
0 | .6647992 2.646627 0.25 0.802 -4.55925 5.888849
1 | 2.118701 5.225777 0.41 0.686 -8.19621 12.43361
|
year |
_cons | 16.95753 6.342342 2.67 0.008 4.526383 29.38869
TEST #2
coef2 | 48.36895 3.32013 14.57 0.000 41.86141 54.87649
coef3 | -50.08894 10.47335 -4.78 0.000 -70.61697 -29.56092
|
year |
_cons | 16.95753 6.342342 2.67 0.008 4.526383 29.38869
我写了下面这段脚本(在 OS X 系统下):sed '/^ +year/,/^ +_cons/{/^ +year/!{/^ +_cons/!d}}' input.txt >output.txt
但是我遇到了以下错误:
sed: 1: "/^ +year/,/^ +_cons/{/^ ...": extra characters at the end of d command
我不确定这种方法是否正确,因为我似乎无法让sed执行。在这里使用sed是否合适,还是应该使用awk?
最后一点,我需要这个脚本在相对通用的Unix安装上工作。我必须将其发送给某人,在非常基本的AIX(我认为)安装下执行。没有perl、没有python,并且我不能通过电子邮件对他们的安装进行太多故障排除。
year
行吗? - jaypal singh+
实例替换为*
。现在已经修复了。谢谢。 - ruakh