1

タブ区切りのデータのサブセットを抽出しようとしています。列でいくつかの情報を使用したいと思います。たとえば、column2 には「;」で区切られた 3 つのスコアがあります。

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」を含めるのが最善です。助言がありますか?

4

2 に答える 2

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  
于 2013-06-10T15:27:48.227 に答える
2

GNU シード

sed -r '/b=0.[0-9]?|b=1.0|b=1([^0-9.]|$)/d' file
于 2013-06-10T16:22:07.130 に答える