从文本文件中删除“单独”行

时间:2014-10-09 10:08:00

标签: bash text-processing

我有一个看起来像这样的文本文件:

>>>aaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaa

>>>aaaaaaaaaaaaaaaaaaaaaaa

>>>aaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaa

>>>aaaaaaaaaaaaaaaaaaaaaaa

>>>aaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaa

即。由“groups”组成的文件,其标题以>>>开头。正如你所看到的,有些组是空的 - 只包含一个标题,我希望它们被删除。结果应该是:

>>>aaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaa

>>>aaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaa

>>>aaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaa

有没有方便的方法来完成它,最好是使用标准的bash tolls s.a awk,sed,grep等?

提前谢谢!

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

这应该做:

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

但是下次你应该展示你已经尝试过的东西

答案 2 :(得分:1)

使用sed,你可以这样写:

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

或者如果您确定所有块都用两个换行符分隔:

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