我有一个类似的文件:
> DC A P C Q Z C D H C > DS J H S > DA U P A A E A U H A
如果两个换行值(>)之间的行数小于例如,则我想删除部分。所以我的例子的解决方案是:
> DC A P C Q Z C D H C > DA U P A A E A U H A
答案 0 :(得分:2)
使用>
作为记录分隔符:
gawk -v RS='>' -v nlines=2 '
{sub(/\n$/,""); n = split($0,a,/\n/)}
n > nlines {print RS $0}
' file
答案 1 :(得分:1)
2017-10-27 22:38:18 DEBUG TestBugs:58 - Duplicate, [Point [x=-97.009868, y=52.358242]] index[15]
2017-10-27 22:38:18 DEBUG TestBugs:58 - Duplicate, [Point [x=-97.009868, y=52.358242]] index[3348]
答案 2 :(得分:0)
使用awk
,根据您的需要修改变量值n=<of your interest>
,其中n
是两个>
之间的最小记录数
一衬垫:
awk -v n=2 'function pr(){if(i>=n)print s}/>/{pr();i=0;s=$0;next}{i++;s=s ORS $0}END{pr()}' infile
更好的可读性:
awk -v n=2 '
function pr(){
if(i>=n)print s;
}
/>/{
pr();
i = 0
s = $0
next
}
{
i++;
s = s ORS $0
}
END{
pr()
}
' infile
输入:
$ cat infile
> DC
A P C
Q Z C
D H C
> DS
J H S
> DA
U P A
A E A
U H A
输出:
$ awk -v n=2 'function pr(){if(i>=n)print s}/>/{pr();i=0;s=$0;next}{i++;s=s ORS $0}END{pr()}' infile
> DC
A P C
Q Z C
D H C
> DA
U P A
A E A
U H A
答案 3 :(得分:0)
你能不能试试,请告诉我这是否对你有帮助。
awk 'count>3 && /^>/{print val;val=""} /^>/{count=count?"":++count;val=""} {count++;val=val?val ORS $0:$0} END{if(count>3){print val}}' Input_file
现在也添加非单线形式的解决方案。
awk '
count>3 && /^>/{
print val;
val=""
}
/^>/{
count=count?"":++count;
val=""
}
{
count++;
val=val?val ORS $0:$0
}
END{
if(count>3){
print val
}
}
' Input_file
输出如下。
> DC
A P C
Q Z C
D H C
> DA
U P A
A E A
U H A
答案 4 :(得分:0)
GNU awk的另一个:
$ awk 'BEGIN{RS=">"}/([^\n]*\n){3}/{printf RS $0}' file
> DC
A P C
Q Z C
D H C
> DA
U P A
A E A
U H A
(虽然没有经过彻底的测试。)
答案 5 :(得分:0)
awk -F"\n" 'BEGIN{RS=">";ORS=">";} NF<=3 && NR>1{next;}1' file