ファイル2のフィールド> xのファイル1の行を選択します。

ファイル2のフィールド> xのファイル1の行を選択します。

次のような多くの情報を含む大容量ファイル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_ffile2から行を保存num
  • num>0.5file1条件が満たされるとライン印刷


次のバージョンが良いと思います。

awk '(getline num < "file2")>0 && num>0.5' file1

関連情報