別のファイルの列をクロスチェックし、欠落している値を印刷する方法は?

別のファイルの列をクロスチェックし、欠落している値を印刷する方法は?

次のファイルがあります。 12列と3244343行があります。このファイルの名前を1に指定します。

variant_id  gene_id tss_distance    ma_samples  ma_count    maf pval_nominal    slope   slope_se    pval_nominal_threshold  min_pval_nominal    pval_beta
chr10_100000235_C_T_b38 ENSG00000227232.5   35211   73  74  0.061157    1.69779e-08 0.510322    0.0890939   0.0006160191.01823e-08  1.17701e-05
chr10_100002628_A_C_b38 ENSG00000227232.5   635545  126 130 0.107438    1.01823e-08 0.405406    0.0696647   0.0006160191.01823e-08  1.17701e-05
chr1_666028_G_A_b38 ENSG00000227232.5   636475  111 115 0.0950413   2.78462e-08 0.411513    0.0729864   0.0006160191.01823e-08  1.17701e-0

以下に示すように、7つのヘッダーと1633293行の異なるファイルがあります。ファイル2。

"variant_id" "hg38_chr" "hg38_pos" "ref_allele" "alt_allele" "hg19_chr" "hg19_pos"
"chr10_100000235_C_T_b38" "chr10" "100000235" "C" "T" "chr10" 101759992
"chr10_100002628_A_C_b38" "chr10" "100002628" "A" "C" "chr10" 101762385
"chr10_100004827_A_C_b38" "chr10" "100004827" "A" "C" "chr10" 101764584
"chr10_100005358_G_C_b38" "chr10" "100005358" "G" "C" "chr10" 101765115

私はvariant_id列にのみ興味があります。これは両方のファイルの最初の列です。

variant_idこれら2つの列を比較して最初の列の値のみを印刷する方法2番目のファイルに見つかりません。上記の例では、出力は次のようになります。

chr1_666028_G_A_b38 

これは最初のファイルでは見つかりますが、2番目のファイルでは見つかりません。

2番目のファイルのすべての値は、variant_id最初のファイルにもあります。しかし、最初のファイルには2番目のファイルにはない追加のIDがあり、これらのIDを識別したいと思います。

ベストアンサー1

システムがサポートしている場合プロセスの交換、フラグ(一致しない行を表示)、フラグ(ファイルからパターンを読み取る)grepと組み合わせて使用​​できます。ここで、「file」はファイルの最初のフィールドのみを印刷するコマンドです。たとえば、-v-f

$ grep -vf <(awk '{print $1}' file2) file1
variant_id  gene_id tss_distance    ma_samples  ma_count    maf pval_nominal    slope   slope_se    pval_nominal_threshold  min_pval_nominal    pval_beta
"chr1_666028_G_A_b38"   ENSG00000227232.5   636475  111 115 0.0950413   2.78462e-08 0.411513    0.0729864   0.0006160191.01823e-08  1.17701e-0

これがオプションでない場合は、最初のフィールドをファイルとして印刷し、次のものを使用できます。

$ awk '{print $1}' file2 > file2.names
$ grep -vf file2.names file1
variant_id  gene_id tss_distance    ma_samples  ma_count    maf pval_nominal    slope   slope_se    pval_nominal_threshold  min_pval_nominal    pval_beta
"chr1_666028_G_A_b38"   ENSG00000227232.5   636475  111 115 0.0950413   2.78462e-08 0.411513    0.0729864   0.0006160191.01823e-08  1.17701e-0

あるいは、すべてのバリアントIDをfile2に格納するのに十分なRAMがあると仮定すると(非常に古いハードウェアを使用しない限り、これを行う必要があります)、それを使用してファイルのawk最初のフィールドをすべて別のファイルに保存できます。

$ awk 'NR == FNR{a[$1]++;next}; !($1 in a)' file2 file1
variant_id  gene_id tss_distance    ma_samples  ma_count    maf pval_nominal    slope   slope_se    pval_nominal_threshold  min_pval_nominal    pval_beta
"chr1_666028_G_A_b38"   ENSG00000227232.5   636475  111 115 0.0950413   2.78462e-08 0.411513    0.0729864   0.0006160191.01823e-08  1.17701e-0

おすすめ記事