次のファイルがあります。 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