2015-07-02 20 views
1

的兩端T或C因此,例如,如果輸入是:

-------A--GG---CCAAT---A------

輸出應爲:

.......A--GG---CCAAT---A......

我寧願爲此在AWK。替換 - 的所有實例。直到A或G或從一個字符串

+0

你已經嘗試過一些東西嗎?你有一些我們可以從頭開始的例子嗎?你至少應該表明你已經做了一些搜索,否則就容易讓其他人爲你編寫代碼:-) – ndsmyter

+0

我試圖使用^和$和通配符與gsub的各種組合,但它並沒有導致在任何地方,本質上來自:awk'{gsub(/ - /,「。」);打印}'。如果有人向我展示如何從一端做到這一點,那就好了,所以我可以做到這一點,然後再做一遍。 – 5heikki

回答

1

這將是一個有點複雜,因爲awk不允許調用與所匹配的字符串的函數,所以你需要手動取出匹配的字符串(lr),進一步對其進行處理,並更換$0與原來的字符串加上匹配的字符串:

awk '{ 
    if (match($0, /^-*/)) { l = substr($0, 1, RLENGTH); gsub("-", ".", l); $0 = l substr($0, RLENGTH + 1); } 
    if (match($0, /-*$/)) { r = substr($0, RSTART); gsub("-", ".", r); $0 = substr($0, 1, RSTART - 1) r; } 
    print $0; 
}' 

或使用gsub再次變異,而不將在$0匹配的字符串:

awk '{ 
    if (match($0, /^-*/)) { l = substr($0, 1, RLENGTH); gsub("-", ".", l); gsub(/^-*/, l, $0); } 
    if (match($0, /-*$/)) { r = substr($0, RSTART); gsub("-", ".", r); gsub(/-*$/, r, $0); } 
    print $0; 
}' 
+0

非常感謝。訣竅是使用我不知道存在的內置變量。 – 5heikki

+0

的確,我剛剛在'awk'手冊中瞭解了這些變量。我在看'match()',但是它不返回匹配的字符串。所以我試圖用'RSTART'和'RLENGTH'來重構它。 –

相關問題