次のような多くの情報を含む大容量ファイルfile1があります。
rs969931 C A 1.993 1.189 1.003 ..............
rs2745406 C T 1.993 1.166 1.003 ..............
rs6939431 A G 0.003 0.207 0.005 ..............
rs1233427 A G 1.990 1.150 1.001 ..............
2番目のファイルfile2には、この情報の品質が含まれています。ファイル2の行Nの値は、ファイル1の行Nの品質に対応します。
0.19893
0.94752
0.93768
0.47781
私が望むのは、ファイル2> 0.5のファイル1から行を選択することです。私が見つけることができる最も近いのはID一致の問題です(別のファイルにIDがリストされているテキストファイルから行を選択する)、ここではファイル2の値を使用していくつかの論理演算を実行する必要があります。
大容量ファイルに対して複数の作業を行う必要があるため、ファイル 2 をファイル 1 に追加し、フィルタリング後に削除するなどの面倒なソリューションを避けてください。
答え1
paste qual.txt data.txt | awk '$1 > 0.5'
これは、最初に品質値を最初の列として含め、別のデータを別の列として含むデータを生成するために使用されますpaste
。このawk
コードは、単に最初の列(品質)が0.5より大きい行を選択して印刷します。
出力品質が不要な場合:
paste qual.txt data.txt | awk '$1 > 0.5' | cut -f 2-
与えられた例では、これが生成されます
rs2745406 C T 1.993 1.166 1.003 ..............
rs6939431 A G 0.003 0.207 0.005 ..............
答え2
そしてawk
そしてgetline
(参照getlineに関するすべて警告する)
$ # can also use: awk '{getline num < "file2"} num>0.5' file1
$ awk -v cmp_f='file2' '{getline num < cmp_f} num>0.5' file1
rs2745406 C T 1.993 1.166 1.003 ..............
rs6939431 A G 0.003 0.207 0.005 ..............
getline num < cmp_f
file2
から行を保存num
num>0.5
file1
条件が満たされるとライン印刷
次のバージョンが良いと思います。
awk '(getline num < "file2")>0 && num>0.5' file1