2

このコマンドを使用して、列 1 に基づいてファイルを並べ替え、最初の列の重複行を削除しました。

sort  -t" " -k1 -u

しかし、それは動作しませんか?

4

2 に答える 2

5

-uGNUソートは、他の人が答えたように、行全体を考慮しません。並べ替えに使用されるフィールドが考慮されます。

あなたの場合、1つのフィールド番号がどのフィールドでソートを開始するかを示しているように、すべてのフィールドでソートしています。-k2つの数値を使用して、終了フィールドを指定することもできます。

試す:

sort -t" " -k1,1 -u

これにより、並べ替えが最初のフィールドのみで並べ替えられ、他のフィールドでは並べ替えられないように制限されます。一意性はそのフィールドでのみチェックされます。

@Shawn Chinのテストファイルを使用するには:

$ cat in.txt
1 2 3 4
3 4 4 4
1 3 4 5
2 3 4 5
$ sort -k1,1 -u in.txt
1 2 3 4
2 3 4 5
3 4 4 4
$ sort -k2,2 -u in.txt
1 2 3 4
1 3 4 5
3 4 4 4
于 2012-06-15T09:09:42.257 に答える
0

編集:私の元の提案は連想配列を使用していましたが、@ Shawn Chinの答えを見て、私が複雑すぎていることに気づきました。bashを使用したShawnのソリューションは次のとおりです。

while read field1 theRest
do
    if [[ $prev != $field1 ]]
    then
        echo "$field1 $theRest"
        prev=$field1
    fi
done < <(sort -t" " -k1 gash.txt)
于 2012-06-15T08:52:36.153 に答える