2016-03-30 4 views
1

私は3つの列を持つデータを持っています。最初の列にはnameがあり、2番目と3番目の列にはセミコロン(;)で区切られた値が1つ以上あります。両方の列の値が指定された値よりも小さいか等しい行を取得するコード

セミコロンで区切られた列の値のペアがdistance <= 10MAF >= 0.5の行を印刷したいとします。

もし私がRでない場合にはRコードを提供するものがあれば、私はうれしいです、AWK/SED。

ID   Distance MAF 
cg12044689 8;40  0.000200;0.59 
cg12143629 0;1;3  0.000200;0.520;0.0413 
cg12247699 42  0.599 
cg12375698 1;10  0.00231;0.51 

出力すべきである:ここ

ID   Distance MAF 
cg12143629 0;1;3  0.000200;0.520;0.0413 
cg12375698 1;10  0.00231;0.51 

答えて

1

を分割することにより、タスクを達成awkスクリプトで、ペアワイズ比較値:

parse.awk

{ 
    # For each row, split the distance and maf columns into the dist and maf arrays 
    n = split($2, dist, ";"); split($3, maf, ";") 
    do { 
    if (dist[n] <= 10 && maf[n] >= 0.5) 
     print 
    } while(n-- >= 1) 
} 

このようなファイル名を指定して実行して:

awk -f ./parse.awk infile 

出力:

cg12143629 0;1;3  0.000200;0.520;0.0413 
cg12375698 1;10  0.00231;0.51