grepを使用して2つの異なるファイルのフィールドを一致させることはできますか?たとえば、file1がある場合は、2つのファイルのPOSフィールドを一致させたいと思います。 macthがある場合は、一致する行のみを出力します。
1 10366 rs58108140 G A
1 51954 rs185832753 G C
ファイル1
#CHROM POS ID REF ALT QUAL
1 10366 rs58108140 G A
1 10611 rs189107123 C G
1 51954 rs185832753 G C
1 13327 rs144762171 G C
1 13957 . TC T 28
1 13980 rs151276478 T C
ファイル2
#CHROM POS ID REF ALT QUAL
1 10366 rs58108140 G A
1 51935 rs181754315 C T
1 51954 rs185832753 G C
1 52058 rs62637813 G C
1 52144 rs190291950 T A
1 52238 rs150021059 T G
1 54353 rs140052487 C A
ベストアンサー1
grepではそうすることはできません。パターンを入力として使用してファイルを検索できますが、ファイル内の特定のフィールドをgrep
指定することはできません。したがって、2番目の位置のみを一致させるには、次のものが必要です。
$ awk '{ if(NR==FNR){a[$2]=$0}else{if($2 in a){print}}}' file1.vcf file2.vcf
#CHROM POS ID REF ALT QUAL
1 10366 rs58108140 G A
1 51954 rs185832753 G C
もちろん、位置は同じですが、変異が異なる染色体にある場合も印刷されます。これはあなたの質問で必要なものですが、chrとposのユニークな組み合わせを見つけるのがより合理的かもしれません。
$ awk '{ if(NR==FNR){a[$1$2]=$0}else{if($1$2 in a){print}}}' file1.vcf file2.vcf
#CHROM POS ID REF ALT QUAL
1 10366 rs58108140 G A
1 51954 rs185832753 G C
これを行うには、grep
まずPOSフィールドを新しいファイルに抽出する必要があります。
awk '{print $2}' file1.vcf > file3
$ cat file3
POS
10366
10611
51954
13327
13957
13980
このファイルを次のコンテンツと一緒に使用してくださいgrep
。
$ grep -f file3 file2.vcf
#CHROM POS ID REF ALT QUAL
1 10366 rs58108140 G A
1 51954 rs185832753 G C
しかし、それは本当に良い考えではありません。たとえば、1103668 since
10366 1103668`is a substring of
と一致する項目も検索します。
最後に、これが2つの有効なvcfファイルであると仮定すると(あなたの例はそうではありません)bedtools intersect
。