2014-10-09 60 views
-3

行我有一个文本文件看起来像这样:删除“孤独”从文本文件

>>>aaaaaaaaaaaaaaaaaaaaaaa 
aaaaaaaaaaaaaaaaaaaaaaaaaa 
aaaaaaaaaaaaaaaaaaaaaaaaaa 

>>>aaaaaaaaaaaaaaaaaaaaaaa 

>>>aaaaaaaaaaaaaaaaaaaaaaa 
aaaaaaaaaaaaaaaaaaaaaaaaaa 

>>>aaaaaaaaaaaaaaaaaaaaaaa 

>>>aaaaaaaaaaaaaaaaaaaaaaa 
aaaaaaaaaaaaaaaaaaaaaaaaaa 

即由“团体”的页眉开始>>>文件。正如你所看到的,一些组是空的 - 只包含一个标题,我希望它们被删除。结果应该是:

>>>aaaaaaaaaaaaaaaaaaaaaaa 
aaaaaaaaaaaaaaaaaaaaaaaaaa 
aaaaaaaaaaaaaaaaaaaaaaaaaa 

>>>aaaaaaaaaaaaaaaaaaaaaaa 
aaaaaaaaaaaaaaaaaaaaaaaaaa 

>>>aaaaaaaaaaaaaaaaaaaaaaa 
aaaaaaaaaaaaaaaaaaaaaaaaaa 

有没有完成它,最好使用标准的bash路费S.A的awk,sed的,grep的等任何方便的方式?

Thankyouverymuch提前!

+3

&你到目前为止试过了什么? – anishsane 2014-10-09 10:14:37

回答

1

这应该这样做:

awk '/.+/ { if (h) {print h; c++; print}} 
    /^>>>/ {h=$0; c=0} 
    /^$/ { if (c>0) print; h=false}' 

但下次你应该表现出的东西,你已经

+0

谢谢!这工作,是优雅和清晰,足以让我理解没有进一步解释(不需要打扰@anishsane)。 至于没有显示我已经尝试过的东西的原因,我在awk中完全禁用,只用于简单的列操作,根本无法提供任何东西。 – brtk 2014-10-09 12:15:46

1
awk '{if (split($0,a,"\n")>1)print}' RS= ORS=$'\n\n' test.txt 
+1

当您更新有关您的编码尝试的问题后,请评论此答案,以便我将此代码的解释。 – anishsane 2014-10-09 10:15:36

1

试图用sed的,你可以这样写:

sed -n '/^>>>/{h;n;/^$/!{H;g;p};d};/^>>>/!p;' file.txt 

,或者如果您肯定所有的块都用两条换行符分开:

sed -n '/^>>>/{h;n;/^$/!{H;g;p};d};p;' file.txt