awk比较两个文件 - 从第一个文件的条件第二个文件中删除行

时间:2014-06-27 09:39:05

标签: bash awk compare

我需要一些帮助。

第一个文件

0.5
0.4
0.1
0.6
0.9

第二个文件.bam (我必须使用samtools视图)

aaaa bbbb cccc 
aaab bbaa ccaa
hoho jojo toto
sese rere baba
jouj douj trou

我需要输出:

aaaa bbbb cccc
aaab bbaa ccaa
sese rere baba

条件:如果来自第一个文件的$ 1是< 0.3; 0.6>从第二个文件中打印相同的行,如果不是,则擦除它。我想从第一个文件的条件得到滤液第二个文件。我更喜欢awk或bash代码,但这并不重要。

第一个文件的条件:

awk '{if($1>0.3 && $1<0.6) {print $0}}'
你能帮助我吗? 非常感谢

3 个答案:

答案 0 :(得分:5)

另一种方式

paste file1 file2 | awk '$1<=0.6&&$1>=0.3{$1="";print substr($0,2) }'

答案 1 :(得分:4)

您可以使用及其getline功能。它从第二个文件读取行,并且对于每个文件使用getline从第一个文件中读取一行,比较它的数字并打印它是否匹配:

awk '
    BEGIN { f = ARGV[2]; --ARGC } 
    { 
        getline n <f
        if ( (n >= 0.3) && (n <= 0.6) ) { 
            print $0 
        } 
    }
' file2 file1

它产生:

aaaa bbbb cccc
aaab bbaa ccaa
sese rere baba

答案 2 :(得分:4)

这是一个awk解决方案:

awk 'FNR==NR {a[NR]=$1;next} a[FNR]>0.3 && a[FNR]<0.6' firstfile secondfile
aaaa bbbb cccc
aaab bbaa ccaa
由于您说sese rere baba而非<0.6

,因此不会打印

<=0.6