Mengurutkan file Linux shell menurut kolom kedua?

89

Saya memiliki file seperti ini:

FirstName, FamilyName, Address, PhoneNumber

Bagaimana cara mengurutkan berdasarkan FamilyName?

Rami Jarrar
sumber
os dan prosesor perintah yang mana?
Preet Sangha
1
Kemungkinan duplikat Urutan Unix dengan Pembatas Tab
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Jawaban:

157

Jika ini UNIX:

sort -k 2 file.txt

Anda dapat menggunakan beberapa -kbendera untuk mengurutkan di lebih dari satu kolom. Misalnya, untuk mengurutkan berdasarkan nama keluarga lalu nama depan sebagai pemecah ikatan:

sort -k 2,2 -k 1,1 file.txt

Opsi yang relevan dari "man sort":

-k, --key = POS1 [, POS2]

mulai kunci di POS1, akhiri di POS2 (asal 1)

POS adalah F [.C] [OPTS], di mana F adalah nomor field dan C adalah posisi karakter di field. OPTS adalah satu atau lebih opsi pemesanan satu huruf, yang menggantikan opsi pemesanan global untuk kunci itu. Jika tidak ada kunci yang diberikan, gunakan seluruh baris sebagai kunci.

-t, --field-separator = SEP

gunakan SEP alih-alih transisi non-blank ke blank

John Kugelman
sumber
2
Berhati-hatilah saat menggunakan --field-separator=','jika Anda mungkin memiliki operator entri data yang memasukkan nilai untuk "Nama depan" seperti "Billy Bob" atau apa pun ... spasi dapat dengan mudah masuk ke data Anda jika Anda tidak melindunginya, tetapi koma relatif tidak mungkin.
Tony Delroy
1
Ada kemungkinan besar kasus koma di bidang tersebut, seperti "Smith, Jr." atau "McDowell, Sr." atau "Dr. John" atau "New York, NY"
jbnunn
2
Perhatikan bahwa jika kolom sejajar secara visual, yaitu ada jumlah spasi yang tidak konstan di antara setiap bidang, Anda harus menggunakan -bopsi. Ini karena sortsebenarnya mempertimbangkan bahwa string yang akan diurutkan dimulai tepat setelah koma, dan bukan dari huruf pertama kolom. Selain itu, Anda mungkin perlu memberi awalan perintah dengan LC_ALL=C, untuk menghindari efek samping apa pun karena lokal, yang dapat terjadi bahkan pada file ASCII sederhana.
calandoa
@calandoa Terima kasih untuk bagian di -b( --ignore-leading-blanks). Untuk memperjelas sedikit: echo -e 'aa<SPACE>a\na<SPACE><SPACE>b' | sort -k2memberi a<SPACE><SPACE>bpertama (kolom kedua dimulai setelah yang pertama non-blank to blank transition, dan <SPACE><SPACE>bsebelum <SPACE>a), tetapi dengan -bitu memberi aa<SPACE>aseperti yang diharapkan ( asebelum b).
Kirill Bulygin
7

Untuk mengurutkan berdasarkan bidang kedua saja (dengan demikian jika bidang kedua cocok, baris yang cocok tetap dalam urutan aslinya tanpa mengurutkan di bidang lain):

sort -k 2,2 -s orig_file > sorted_file
Cian
sumber
3

FWIW, berikut adalah metode pengurutan untuk menunjukkan proses mana yang menggunakan memori paling baik.

memstat | sort -k 1 -t':' -g -r | less

Opsi pengurutan diatur ke kolom pertama, menggunakan: sebagai pemisah kolom, pengurutan numerik dan urutkan secara terbalik.

netskink.dll
sumber
2
sort -nk2 file.txt

Karenanya Anda dapat mengubah nomor kolom.

Dheeraj Kumar
sumber