我一直在尝试过滤文本文档。
我的文件是这样的:
a score=2910 EG2=0 E=0
s MJUT01042700.1 17232 3459 + 53939
s scaffold1|size190226 11711 3461 + 190226
a score=1427 EG2=0 E=0
s MJUT01011585.1 1110178 1852 + 1659926
s scaffold1|size190226 96228 1834 + 190226
a score=1136 EG2=0 E=0
s MJUT01033992.1 44701 1369 + 67673
s scaffold1|size190226 96715 1347 + 190226
a score=1074 EG2=0.02 E=0
s MJUT01027223.1 115853 1482 + 196715
s scaffold1|size190226 140742 1471 + 190226
a score=1060 EG2=0 E=0.3
s MJUT01027223.1 192518 1484 + 196715
s scaffold1|size190226 140742 1471 + 190226
如果对于每个三元组,第三列和第二列之间的第六列(最后一列)的差异为正,我想保留行的三元组。
例如,第一个三联体:190226 - 53939> 0,所以我打印整个三重线。
我尝试了几件事,但似乎我在处理线跳时遇到了麻烦。我的命令返回废话:)。
我绝对不习惯awk,如果下面的命令很丑,我道歉...:
awk -F " " '{
l1=$1; l2=$2; l3=$3; l4=$4; # get line with score, Eg and E
getline;
ll1=$1; ll2=$2; ll3=$3; ll4=$4; ll5=$5; ll6=$6; # get "MJUT..." line
getline;
if ($6-ll6 >= 0) # Compare values between "MJUT..." line and "scaffold" line
print l1, l2, l3, l4;
print ll1, ll2, ll3, ll4, ll5, ll6;
print $1, $2, $3, $4, $5, $6;
print "";
getline; # Jump to next score line
}' myfile.txt
答案 0 :(得分:1)
您可以使用特殊记录分隔符''
(空字符串)在空行上分割记录,然后检查最后一个字段是否大于第10个字段:
$ awk -v RS='' '$NF > $10' infile
a score=2910 EG2=0 E=0
s MJUT01042700.1 17232 3459 + 53939
s scaffold1|size190226 11711 3461 + 190226
a score=1136 EG2=0 E=0
s MJUT01033992.1 44701 1369 + 67673
s scaffold1|size190226 96715 1347 + 190226