次のような形式のテキストファイルがあります。
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
可能ですか?
列は単一のスペースで区切られます。
すべてのパスの長さは同じです。
読みやすいようにグローバルにソートすることをお勧めします。
ベストアンサー1
1つの方法は次のとおりです。
$ 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