首頁>Program>source

我想grep vcf檔案以搜尋多个职位.以下作品:

grep -f template_gb37 file.vcf>gb37_result

我的template_gb37有10000行,看起来像這樣:

1   1156131 rs2887286   C   T
1   1211292 rs6685064   T   C
1   2283896 rs2840528   A   G

当vcf具有rs時,它可以完美工作。

問题是我要轉至grep的vcf可能没有rs和".代替:

File.vcf

#CHROM  POS  ID  REF  ALT ....
1   1156131 .   C   T  ....
1   1211292 .   T   C  ....
1   1211292 .   T   C  ....

是否可以使用" rs"或仅搜尋"。"来搜尋多个模式?

預先感谢

最新回復
  • 5月前
    1 #

    我认為您的意思是檔案中的第二个欄位可能是 .rsNNNNNN 而您想要允许.因此,我认為您需要使用 |进行的"替代" 像這樣:

    printf "cat\nmonkey\ndog" | grep -E "cat|dog"
    cat
    dog
    

    因此您的特征碼檔案 "template_gb37" 需要看起来像這樣:

    1   1156131 (\.)|rs2887286   C   T
    1   1211292 (\.)|rs6685064   T   C
    1   2283896 (\.)|rs2840528   A   G
    

    您需要搜尋:

    grep -Ef PATTERNFILE file.vcf
    

    如果您不想更改特征碼檔案,則可以在每次使用時對其进行即時編輯.所以,如果 "template" 当前看起来像這樣:

    1   1156131 rs2887286   C   T
    1   1211292 rs6685064   T   C
    1   2283896 rs2840528   A   G
    

    以下 awk 將對其进行編輯:

    awk '{$3 = "(\\.)|" $3}1' template
    

    為此:

    1 1156131 (\.)|rs2887286 C T
    1 1211292 (\.)|rs6685064 T C
    1 2283896 (\.)|rs2840528 A G
    

    這意味着您可以像這樣使用我的整个答案:

    grep -Ef <( awk '{$3 = "(\\.)|" $3}1' template ) file.vcf
    

  • 5月前
    2 #

    似乎更好地使用 awk 為此,您想要的資料格式就是列.首先解析(固定)模式,將其儲存,還使用點而不是 rs...建立額外的模式 .然後匹配第二个檔案中的行。

    awk 'NR==FNR{a[$1 $2 $3 $4 $5]; a[$1 $2 "." $4 $5]; next}
         ($1 $2 $3 $4 $5) in a' template_gb37 file.vcf > gb37_result
    

  • centos:即使给出了正確的路徑,Docker也無法找到檔案
  • python contextmanager如何將異常引發迴帶裝飾的生成器?