Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Awk 根据同一列的值之间的差异打印行_Awk - Fatal编程技术网

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语句放在{…}之间时,它是有效的,但我被告知这不是答案。