2つのファイルのパターンフィールドを一致させるgrep

2つのファイルのパターンフィールドを一致させるgrep

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 since10366 1103668`is a substring ofと一致する項目も検索します。


最後に、これが2つの有効なvcfファイルであると仮定すると(あなたの例はそうではありません)bedtools intersect

おすすめ記事