Bash

從文件中刪除重複的單詞

  • September 19, 2022

我有一個格式類似於的文本文件

path1/path2/path3a 34474538656
path1/path2/path3a 8115147679
path1/path2/path3b 2266371027
path1/path2/path3b 3860823 
path1/path2/path3b 554247

這種模式還在繼續。我希望僅刪除第 1 列重複條目並將其列印為

path1/path2/path3a 34474538656
                  8115147679
path1/path2/path3b 2266371027
                  3860823 
                  554247

這可能嗎?

列由單個空格分隔

所有路徑的長度相同

全域對齊將更易於閱讀。

這是一種方法:

$ awk '{ print seen[$1]++ ? "                   "$2 : $0}' file
path1/path2/path3a 34474538656
                  8115147679
path1/path2/path3b 2266371027
                  3860823
                  554247

也可以寫成:

$ awk -v spacer='                   ' '{ print seen[$1]++ ? spacer$2 : $0}' file
path1/path2/path3a 34474538656
                  8115147679
path1/path2/path3b 2266371027
                  3860823
                  554247

或者

$ awk -v spacer='                   ' '{ if(seen[$1]++){print spacer$2}else{print}}' file
path1/path2/path3a 34474538656
                  8115147679
path1/path2/path3b 2266371027
                  3860823
                  554247

或者,在 中perl,即時計算墊片的長度:

$ perl -lane '$spacer=$seen{$F[0]}++ ? " " x length($F[0]) : $F[0]; print "$spacer $F[1]"' file
path1/path2/path3a 34474538656
                  8115147679
path1/path2/path3b 2266371027
                  3860823
                  554247

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