2015-09-15 30 views
2

不確定這個問題是否已被問到,但基本上我想從包含特殊字符的file1中讀取並將它們改爲URL編碼版本。 file2是一個管道分隔的文檔,例如:#|%23。使用數組來改變bash中的行分隔文本文件

因此,當腳本從file1讀取「#」時,它會將其更改爲 「%23」。有174個不同的字符可以識別,因此如果 聲明不可行。

注:我寫這是bash的

我用類似awk或者sed,但是我不知道我會怎麼用文本文件中使用此考慮。

有什麼建議嗎?閱讀翻譯文件的文件之前,翻譯

+2

使用已經有處理URL編碼庫的語言。 – chepner

+3

請包括您的輸入文件的正確樣本,以及您所期望的輸出和迄今爲止編寫的代碼。如果該代碼到達產出點,請包括這一點。這裏的人會很樂意幫助,但更好的問題是依賴更好的答案。 – ghoti

+0

是的,對chepner的評論+1。雖然我懷疑你建議*可以做什麼,但另一個問題是它是否應該完成。聽起來好像你正在重新發明一個支持[XY問題]的輪子(http://mywiki.wooledge.org/XyProblem)。 – ghoti

回答

2
awk -F '|' ' 
    FNR == NR { Trsl[ $1 ] = $2; next} 
    FNR != NR { 
     s0 = $0 
     for(Char in Trsl) { 
     Cnt = split(s0, a0, Char) 
     s0 = a0[ 1 ] 
     for(i = 2; i <= Cnt; i++) s0 = s0 Trsl[ Char] a0[ i] 
     } 
     print s0 
    } 
    ' File2 File1 
  • 順序文件的重要
  • 假設|
  • GSUB不能由於使用的元字符意想不到的結果的特殊字符
  • as @karakfa備註,翻譯順序(與File2條目有關)不保留,所以如果字符在較早的翻譯結果中使用,可能會發生一些不需要的結果,如 - >%20% - >Percent會給Percent20爲原始
+1

確保您可以控制替換訂單,如果先將#替換爲%23,然後將%替換爲%25,則將獲得%2523。 – karakfa

+0

好點,OP應該指定想要的behviour。如果訂單很重要,我們應該使用2個數組而不是1個,並通過索引管理訂單 – NeronLeVelu

相關問題