2016-11-27 36 views
6

我有一個包含20 000個探針的數據集,它們分爲兩列,每列21個。從這個文件中,我需要提取Probe1列中最後一個核苷酸與Probe 2列中最後一個核苷酸匹配的行。到目前爲止,我嘗試了AWK(substr)函數,但沒有得到預期的結果。這裏是一個班輪我想:awk:如何在一行中比較兩個字符串

awk '{if (substr($2,21,1)==substr($4,21,1)){print $0}}' 

另一種選擇是錨定在列2和4(awk '$2~/[A-Z]$/)最後一個字符,但我不能找到一種方法,探頭在使用正則表達式兩列匹配。所有的建議和意見將非常感激。數據集的

實施例:

 Probe 1      Probe 2 
4736 GGAGGAAGAGGAGGCGGAGGA A GGAGGACGAGGAGGAGGAGGA 
4737 GGAGGAAGAGGAGGGAGAGGG B GGAGGACGAGGAGGAGGAGGG 
4738 GGAGGATTTGGCCGGAGAGGC C GGAGGAGGAGGAGGACGAGGT 
4739 GGAGGAAGAGGAGGGGGAGGT D GGAGGACGAGGAGGAGGAGGC 
4740 GGAGGAAGAGGAGGGGGAGGC E GGAGGAGGAGGACGAGGAGGC 

希望的輸出:

4736 GGAGGAAGAGGAGGCGGAGGA A GGAGGACGAGGAGGAGGAGGA 
4737 GGAGGAAGAGGAGGGAGAGGG B GGAGGACGAGGAGGAGGAGGG 
4740 GGAGGAAGAGGAGGGGGAGGC E GGAGGAGGAGGACGAGGAGGC 
+4

您給出的'awk'示例已經生成了您所描述的所需輸出。你還需要什麼? – janos

+0

確實有效,對於混淆抱歉。 – Bio21

回答

5

這將過濾輸入,匹配線,其中第二列的最後一個字符是等於第四的最後一個字符列:

awk 'substr($2, length($2), 1) == substr($4, length($4), 1)' 

什麼我改變相比,你的腳本示例:

  • 移動if聲明瞭{ ... }塊到過濾
  • 使用length($2)length($4)而不是硬編碼21
  • ,則不需要{ print $0 }的價值,因爲這是對符合條件的行的默認操作