Awk 根据同一列的值之间的差异打印行
我尝试过滤文本文档已有一段时间了 我有这样的文件:Awk 根据同一列的值之间的差异打印行,awk,Awk,我尝试过滤文本文档已有一段时间了 我有这样的文件: 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=11
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
您可以使用特殊的记录分隔符
'
(空字符串)在空行上拆分记录,然后检查最后一个字段是否大于第十个字段:
$ 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
awk-vrs='$NF>$10'
@karakfa我知道里面藏着一个较短的,但我的大脑突然停止了;)显然,当我把if语句放在{…}之间时,它是有效的,但我被告知这不是答案。