2016-05-19 41 views
0

我有一個重複信息的文件。這些行被編號,後跟一個冒號,後面跟着信息。我只想在重複信息的末尾添加一個序列號。如何將連續數字放在一行中重複數據的末尾?

例子。

輸入:

1:Jose da Silva 
2:Jose da Silva 
3:Fulano de Tal 
4:Jose da Silva 
5:Sicrano Pereira 
6:Ze Ruela 
7:Sicrano Pereira 
8:Jose da Silva 

輸出:

1:Jose da Silva #1 
2:Jose da Silva #2 
3:Fulano de Tal 
4:Jose da Silva #3 
5:Sicrano Pereira #1 
6:Ze Ruela 
7:Sicrano Pereira #2 
8:Jose da Silva #4 

[這個問題從this one不同,因爲這裏的線是不同的永諾(每行具有不同的數目)。我的輸入/輸出的例子可能看起來非常相似,但在實際應用中,它們並不]

+0

這是你的另一個問題的重複數據刪除時,微小的變化並不保證一個新的問題 – 123

+0

我害怕社會的這樣認爲。我認爲這是一個不同的問題。但很抱歉。我應該刪除其他問題嗎? – meleu

+1

做你想做的,我不是警察。 – 123

回答

1

調整my previous answer

awk -F: 'FNR==NR {count[$2]++; next} 
     count[$2]>1 {$0=$0 OFS "#"++times[$2]} 
     1' file file 

即:第一次,計算每個第二塊出現的次數。第二次,不斷增加的數字附加到那些出現多次。因此,不是比較整行,而是比較第二個字段,即冒號:的所有內容。

進一步解釋:

  • FNR==NR {actions; next} {more_actions} file1 file2包括在讀第二個讀數時,第一個文件和其他more_actions時做一些東西actions。當你想比較文件時,這非常方便,就像我們在這裏做的那樣。但是等一下,這裏我們只有一個文件,對吧?是的,但這也可以將文件中的行彼此進行比較。更多關於這個的信息在Idiomatic awk
  • 所以FNR==NR {count[$2]++; next}存儲在數組中count每隔第2個字段出現多少次。這樣,Jose da Silva會計數4次,等等。注意我們使用$2作爲數組的索引:這是基於我們用-F:設置的分隔符:的第二個字段。也就是說,第一個領域是第一個到第一個:,第二個領域從第一個:到第二個等等。
  • count[$2]>1 {$0=$0 OFS "#"++times[$2]} thi sis已經第二次讀取該文件。在這裏它一直檢查當前時間的第二個字段上的計數器是否表明它發生一次或多次。如果它不止一次,它會添加到原始字符串$0的一些內容。這是OFS "#"++times[$2]
    • OFS是輸出字段分隔符。即,打印數據時使用的字段分隔符。由於我們在運行程序之前沒有設置它,所以它默認爲一個空格。
    • "#"這只是我們想在櫃檯前添加的一些文字。
    • ++times[$2]這只是一個跟蹤到目前爲止打印了多少次的計數器。由於我們有不同的第二個字段,我們需要一個數組times[]來跟蹤它們中的每一個。
  • 1在腳本的最後我們有這個1。這是一種打印行的慣用方式:當表達式爲真時,1是真值和awk的行爲是打印當前行。也就是說,要打印$0可以是原始文件或具有一些尾隨新內容的打印文件。

輸出:

$ awk -F: 'FNR==NR {count[$2]++; next} count[$2]>1 {$0=$0 OFS "#"++times[$2]}1' file file 
1:Jose da Silva #1 
2:Jose da Silva #2 
3:Fulano de Tal 
4:Jose da Silva #3 
5:Sicrano Pereira #1 
6:Ze Ruela 
7:Sicrano Pereira #2 
8:Jose da Silva #4 
+0

我在腳本上使用了你的代碼片段,並給了你應得的榮譽。看看:https://github.com/meleu/RetroPie-input-selection/blob/master/input_selection.sh – meleu

+0

如果你想要引用其他的話,請告訴我(也許你的網站/博客/等等。 )。 – meleu

+0

@meleu這真是太好了!我在那裏看到很好的代碼,做得很好。我已編輯,以添加腳本的進一步解釋。 – fedorqui

相關問題