Awk

刪除多個 txt 文件中的重複行

  • January 15, 2022

我在一個文件夾中有 12 個文本文件,每個文件大約有 500 萬行,每個文件本身沒有重複的行,但在多個文件中有重複,我想刪除每個文件中的重複行,但仍然單獨保存,我嘗試了許多 Linux 排序命令,它不斷將文件合併在一起,我有 Windows、Linus 和 Mac,是否有任何程式碼或應用程序可以做到這一點?

要刪除所有重複項,但保留文件中第一個出現的第一個並從其他文件中刪除,您可以使用 awk 如下,這也保留了行的順序。

awk '!seen[$0]++ { print >FILENAME".new" }' file1 file2 ... file12

這裡不需要通過 awk 關閉打開的文件,因為它最多可以有 12 個文件,但是您仍然可以在每個文件處理和完成後 close() 它們。

awk '!seen[$0]++ { 
   if(prev!=FILENAME) close(prev".new");
   print >FILENAME".new";
   prev=FILENAME }
' file1 file2 ... file12

您可以使用 shell 和外部命令mv,然後將輸出文件重命名為原始名稱(您也可以使用rename命令):

for file in ./*.new; do echo mv -v -- "$file" "${file%.new}"; done

注意:echo如果您對結果滿意,請刪除。


如果你有 GNU awk,你可以使用-i inplaceoption 來修改文件並簡化整個命令,如下所示:

gawk -i inplace '!seen[$0]++' file1 file2 ... file12

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