2

次の行があります。

123 abcd 456 xyz
123 abcd 678 xyz
234 egfs 434 ert
345 fggfgf 456 455 rty
234 egfs 422 ert 33

したがって、ここでは、最初のフィールドが複数の行で同じである場合、それらは重複していると見なされます。したがって、上記の例では、123 は 2 行で同じですが、重複と見なされます (ただし、中央の 1 つのフィールドが異なります)。同様に、234 の行は重複しています。これらの重複行を削除する必要があります。

それらは 100% 重複していないため、sort u機能しません。これらの重複行を削除する方法を知っている人はいますか?

4

3 に答える 3

7

これは awk にとって非常に簡単な作業です。私なら awk で行います。vim では、次のことができます。

% !awk '\!a[$1]++'

それからあなたは得ました:

123 abcd 456 xyz
234 egfs 434 ert
345 fggfgf 456 455 rty

シェルで実行する場合は、次をエスケープする必要はありません!:

awk '!a[$1]++' file
于 2013-11-12T22:02:03.793 に答える
0

これは私のPatternsOnText プラグインを使えば簡単です。重複チェックで無視されるパターンを指定できます。あなたの場合、それは最初の(スペースで区切られた)フィールドの後のすべてになります:

%DeleteDuplicateLinesIgnoring / .*/
于 2013-11-13T09:24:50.273 に答える
0
g/\%(^\1\>.*$\n\)\@<=\(\k\+\).*$/d
于 2013-11-12T21:54:56.003 に答える