7

彼はすべて、いくつかの列を含むファイルを持っています。列 2 の並べ替えを行い、列 1 に uniq を適用したいと思います。同じ列の並べ替えと uniq について話しているこの投稿を見つけましたが、私の問題は少し異なります。sortandを使用して何かを使用することを考えてuniqいますが、方法がわかりません。ありがとう。

4

4 に答える 4

7

パイプを使用できますが、設置されていません。

例 :

$ cat initial.txt
1,3,4
2,3,1
1,2,3
2,3,4
1,4,1
3,1,3
4,2,4

$ cat initial.txt | sort -u -t, -k1,1 | sort -t, -k2,2
3,1,3
4,2,4
1,3,4
2,3,1

結果はキー 2 でソートされ、キー 1 で一意です。結果はコンソールに表示されることに注意してください。ファイルに保存する場合は、リダイレクト ( > newFiletxt)を使用してください。

この種のより複雑な操作の他の解決策は、別のツールに依存することです (好み (および年齢) に応じて、awk、perl、または python)。

編集:新しい要件を正しく理解していれば、列2でソートされ、列1は特定の列2に対して一意です:

$ cat initial.txt | sort -u -t, -k1,2 | sort -t, -k2,2
3,1,3
1,2,3
4,2,4
1,3,4
2,3,1
1,4,1

それはあなたが期待するものですか?そうでなければ、私は理解できませんでした:-)

于 2011-06-10T05:19:49.090 に答える
0

私があなたの言うことを正しく理解したことを確認するためだけに。ファイルの2番目の列に基づいてファイルを並べ替えたいとします。次に、最初の列から重複を削除します(列1にuniqを適用するという別の言い方をします!)。これを行うには、次の3つのタスクを実行する必要があります。

  1. uniqが適用される列をソートします(uniqはソートされた入力でのみ機能するため)。
  2. ソートされた列にuniqを適用します。
  3. 2列目の値に基づいて出力を並べ替えます。

パイプの使用:コマンドは

 sort -t ',' -k1  fileName| awk '!x[$1]++' | sort -t ',' -k2

uniqで最初のフィールドを指定することはできないことに注意してください。-fスイッチを使用して、最初のフィールドをジャンプできnます。したがって、私はawkを置き換えていましuniqた。

于 2012-06-12T14:45:15.750 に答える
0

私はこれを使いました sort -t ',' -nk2

ここで並べ替え

1,2
2,5
3,1

to

3,1
1,2
2,5
于 2013-09-25T17:00:58.810 に答える
0

uniq機能するにはデータがソートされている必要があるため、sort2番目のフィールドに適用uniqしてから最初のフィールドに適用すると、正しい結果が得られません。

あなたは試してみたいかもしれません

sort  -u -t,  -k1,1 filename | sort -t, -k2,2
于 2011-06-10T05:21:58.220 に答える