提取列中的信息

时间:2013-06-10 15:13:09

标签: unix awk extract vcf

我正在尝试提取以制表符分隔的数据子集。我想在列中使用一些信息。例如,column2有三个分数由“;”

分隔
col1 col2
1    a=2;b=1.1;c=0    
1    a=0.2;b=0.2;c=0.5  
1    a=1.5;b=1.9;c=3.5  

我想提取b值大于1的行。在这种情况下,我想要的输出将是

col1 col2
1    a=2;b=1.1;c=0    
1    a=1.5;b=1.9;c=3.5  

我尝试使用awk但是在列中提取信息不起作用。此外,订单并不总是相同(a,b,c等)。最好包括'b>搜索条件中的1'。有什么建议吗?

2 个答案:

答案 0 :(得分:4)

由于Column2的顺序可以是随机的,您可以执行以下操作:

awk -F'\t' '
NR>1 {
    split($2,ary,/[;=]/); 
        for (i=1;i<=length(ary);i++) { 
            if (ary[i]=="b" && ary[i+1]>1) {
                print $0 
            }
        }
    next
}1' file

测试:

$ cat f
col1    col2
1       a=2;b=1.1;c=0    
1       a=0.2;b=0.2;c=0.5  
1       a=1.5;b=1.9;c=3.5  

$ awk -F'\t' '
NR>1 {
    split($2,ary,/[;=]/); 
        for (i=1;i<=length(ary);i++) { 
            if (ary[i]=="b" && ary[i+1]>1) {
                print $0 
            }
        }
    next
}1' f
col1    col2
1       a=2;b=1.1;c=0    
1       a=1.5;b=1.9;c=3.5  

答案 1 :(得分:2)

GNU sed

sed -r '/b=0.[0-9]?|b=1.0|b=1([^0-9.]|$)/d' file