我想從下面的文件中找到重複的名稱,並用「」標記它們。在重複的名稱上添加雙引號
文件:
James Miki:123-456-7890
Wang Tai: 234-563-6879
James Miki: 123-456-7890
輸出想要的樣子:
"James Miki": 123-456-7890
謝謝。
我想從下面的文件中找到重複的名稱,並用「」標記它們。在重複的名稱上添加雙引號
文件:
James Miki:123-456-7890
Wang Tai: 234-563-6879
James Miki: 123-456-7890
輸出想要的樣子:
"James Miki": 123-456-7890
謝謝。
試試這個 -
cat f
James Miki:123-456-7890
Wang Tai: 234-563-6879
James Miki: 123-456-7890
James Miki: 456-456-8888 ### added for test case
Wang Tai: 234-563-6879 ### added for test case
Vipin Kumar : 878-432-2345 ### added for test case
Vipin Kumar : 878-432-2345 ### added for test case
awk -F':' '{gsub(/ /,"",$2)}{b[$1FS$2]++} END {for(k in b) if(b[k]>1) {split(k,u,":"); print v,u[1],v FS u[2]}}' v='"' OFS="" f
"Vipin Kumar ":878-432-2345
"Wang Tai":234-563-6879
"James Miki":123-456-7890
解釋 -
gsub(/ /,"",$2): Remove space from 2nd column
b[$1FS$2]++ : Create array b and store col1 and 2
if(b[k]>1) : Check duplicate record
split(k,u,":") : split the stored value in k (combination of col1 and 2) so that we can add double quote on first column.
嗨VIPIN,感謝您的幫助。我試過你的腳本,但它似乎只打印出我的測試文件中的一個結果,實際上有三個重複的名字。 – xmz
@ XimengZhao - 我已經用測試用例和新代碼更新了我的答案,請檢查。 –
awk
來救援!
$ awk -F: 'a[$1]++ {print "\"" $1 "\"" FS $2}' file
"James Miki": 123-456-7890
嗨,這是我從上面的代碼得到的結果。我想展示的只是標籤重複的名稱和非重複的名稱仍然存在。謝謝。「Evich卡倫」:284-758-2867 「: 」Evich卡倫「:284-758-2867 」: 「: 「Fardbarkle弗雷德」:674-843-1385 「: 」「: 」 : 「」: 「: 」: 「: 」「: 」「: 」: 「: 」: 「尼爾傑西」:408-233-8971 「: 「」: 「」: 「: 」「: 」: 「: – xmz
請不要在評論中粘貼格式化的數據,而是更新您的問題。 – karakfa
@ XimengZhao除非你明確地打印'Fardbarkle Fred',否則不可能從包含'Fardbarkle Fred'的輸入中得到包含'Fardbarkle Fred'的輸出,我假定你不是。當編輯你的問題來解釋你使用這個解決方案時的問題(這對你問的問題來說確實是正確的解決方案),確保你發佈的輸出與你的輸入相匹配,並且兩者都真實地代表你的真實數據。 –
sed 's/: */:/' FILE | awk -F: '{ if (arr[$1":"$2]) print "\""$1"\":"$2; else { arr[$1":"$2]++; print $0 }}'
感謝里卡多,我試了一下你的腳本,發現文件中有兩個重複的名字,它只打印出一個帶雙引號的名字。如果條件爲真,如何修改代碼,打印所有信息。 – xmz
使用另一種方法sed
+ sort
+ uniq
管道:
cat file | sed 's/^\(.*\) *: */"\1": /' | sort | uniq -d
輸出:
"James Miki": 123-456-7890
我得到了像「詹姆斯三木:123-456-7890」,但我想要的是「詹姆斯三基」:123-456-7890,雙引號不符合名稱。 – xmz
@XimengZhao,檢查你的表達錯誤。上述方法可以很好地處理您的輸入 – RomanPerekhrest
SO不是自由編碼服務。請發佈你已經嘗試過的。另外,非重複行會發生什麼? –
你準備使用其他標準的UNIX程序,比如'sort'和'uniq'嗎?因爲在這樣的情況下他們會讓你的生活更輕鬆。 –
我輸入sortabat2.txt | uniq -d,它打印出唯一的名稱,但是如何在databook2.txt中添加「」到名稱 – xmz