2017-09-06 33 views
0

我想和查找值在另一個主文件中的文件來替換值我目前使用下面的命令查找和從值文件替換主文件

awk 'FNR==NR { array[$1]=$2; next } { for (i in array) gsub(i, array[i]) }1' map.txt test1.txt 

貓的map.txt

NOT NULL

貓的test.txt

CHARACTER SET LATIN NOT CASESPECIFIC NOT NULL

結果:

CHARACTER SET LATIN NOT NULL CASESPECIFIC NULL

它工作正常的進行更換單個單詞。

但是,當我給多個單詞,引號裏說

貓的map.txt

'NOT NULL' 'NULL'

預期輸出:

字符集拉丁不是CASEPULL NULL NULL

這是行不通的,如果我必須替換多個單詞組合。

任何幫助在這裏將不勝感激。

在此先感謝。

+0

必須引用嗎? map.txt中的替換集是否都相等?這意味着有兩個詞作爲一個詞的索引。 – JFS31

+0

[編輯]你的問題使用'{}'按鈕來正確地格式化你的輸入和輸出,所以我們有我們可以複製/粘貼的東西來測試。 –

回答

0

所以如果你生活中可以沒有引用的文字和的map.txt文件查找,你可以做這樣的事情全部更換相同:

aawk 'FNR==NR{ array[$1]=$2; next } { for (i in array) gsub(i, array[i]) }1' FS=":" map.txt FS=" " test.txt 

貓的test.txt

CHARACTER SET LATIN NOT CASESPECIFIC NOT NULL 

貓圖.TXT

NOT NULL : NULL 

輸出:

CHARACTER SET LATIN NOT CASESPECIFIC NULL 

還有一句:

貓的test.txt

CHARACTER SET LATIN NOT CASESPECIFIC NOT NULL 

貓圖。TXT

SET LATIN NOT CASESPECIFIC NOT : NULL 

輸出:

CHARACTER NULL NULL 

你必須做出的調整是將地圖文件通過分離這兩個領域(目標進行更換,更換)通過:(或其他任何東西,只是改變它在腳本中)。如果你這樣做,它會使腳本保持低複雜度,但現在工作很重要,你要替換多少字。

+0

這沒有給我所需的輸出。 它所做的是將'NOT'替換爲'NULL'。 我需要的是用'NULL'替換'NOT NULL' –

+0

還有其他建議嗎? 我試過用引號,它不工作。 –

+0

Mhhh,這很奇怪。因此,如果使用test.txt和map.txt作爲發佈,它將用NULL替換NOT NULL。但是沒有使用引號。 – JFS31