0

次の形式のファイルがあります:
12345 TAB_HERE Name : The Actual Name TAB_HERE 6785

例えば。


1001020 名前 : SMITH S ANNALOLA 14570
名前:マシュー・サンディ・ヒル 6440
7001083 名前 : ターニャ・モリソン・ミラー 14406

数字の最後のフィールドで並べ替えたい。

シンプルな 1 行の Python ソリューションまたは Linux ツール ベースのソリューションをお勧めします。

sort -k 3,3n を使用してみましたが、うまくいきませんでした。
そして、 python -c "code here" として実行できる単一行の python コードを書くことができないようです

私は次を見ましたが、役に立ちませんでした:

http://www.unix.com/unix-dummies-questions-answers/18359-how-do-i-specify-tab-field-separator-sort.html

http://www.unix.com/unix-dummies-questions-answers/30450-sort-third-column-n-command.html

http://www.linuxquestions.org/questions/programming-9/unix-sort-on-multiple-fields-598813/

4

3 に答える 3

3

迅速な解決策:

import sys
print "".join(sorted(sys.stdin.readlines(), key=lambda x:int(x.split()[-1])))

このソリューションにはいくつかの欠点があります。たとえば、最後のフィールドに数字のない行がある場合、または最後のフィールドではなく他のすべてでデータを並べ替える場合は、機能しません。この場合、正規表現(reモジュール)を使用し、関数での並べ替えに使用するフィールドを指定する必要がありkeyます。

于 2012-06-18T16:26:58.960 に答える
2

Pythonワンライナー:

cat file | python -c 'import sys; print "".join(sorted(sys.stdin.readlines(), key=lambda x:int(x.split()[-1])))'

他のPythonの例がワンライナーとして機能しない理由は、彼が「」を使用してコードをマークアップし、join()を呼び出しているためです。

于 2012-06-19T10:37:13.020 に答える
0

sort コマンドの --key パラメータはスペース文字をカウントしていると思います。

sort -k7n

私のために働いた..

于 2012-06-18T16:32:22.103 に答える