Awk

如果大於 12 次,如何列印重複記錄?

  • June 13, 2022

如何使用 awk 列印重複超過 12 次的重複記錄。

輸入:

1|abc123
2|abc123
3|abc123
4|abc123
5|abc123
6|abc123
7|abc123 
8|abc123
9|abc123 
10|abc123
11|abc123
12|abc123
13|cde456
14|xyz321
15|jkl245
16|abc123
17|abc123
18|abc123
19|def567
20|abc123

預期輸出:

1|abc123
2|abc123
3|abc123
4|abc123
5|abc123
6|abc123
7|abc123 
8|abc123
9|abc123 
10|abc123
11|abc123
12|abc123
15|abc123
16|abc123
17|abc123
18|abc123
20|abc123

我嘗試了以下命令,但沒有得到準確的輸出。

awk -F'|' 'NR==FNR{cnt[$2]++; next} cnt[$2]>12' input > output

如果您雙重解析文件,您的命令會很好,例如:

awk -F'|' 'FNR==NR{c[$2]++;next} c[$2]>12' input input > output

在第一次通過時,您計算出現次數,在第二次通過時,您僅列印c>12. 它還具有記憶體效率。也尊重原始文件的行順序。如果您願意,您可以輕鬆地執行任何排序。

順便說一句,您目前的輸入範例中沒有出現超過 12 次的行。abc123出現的正是12時候。此外,在這些事件之一中還有一個尾隨空格7|abc123 ,這意味著不同的第二個欄位。

引用自:https://unix.stackexchange.com/questions/706045