このコマンドを使用して、列 1 に基づいてファイルを並べ替え、最初の列の重複行を削除しました。
sort -t" " -k1 -u
しかし、それは動作しませんか?
-u
GNUソートは、他の人が答えたように、行全体を考慮しません。並べ替えに使用されるフィールドが考慮されます。
あなたの場合、1つのフィールド番号がどのフィールドでソートを開始するかを示しているように、すべてのフィールドでソートしています。-k
2つの数値を使用して、終了フィールドを指定することもできます。
試す:
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
編集:私の元の提案は連想配列を使用していましたが、@ 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)