Masukan yang diberikan:
hello: world foo bar baz
bar:
baz: bin boop bop fiz bang beep
bap: bim bam bop
boatkeeper: poughkeepsie
Saya ingin mengurutkannya menjadi sebagian besar kata di bagian atas, paling tidak di akhir, seperti:
baz: bin boop bop fiz bang beep
hello: world foo bar baz
bap: bim bam bop
boatkeeper: poughkeepsie
bar:
Bagaimana saya melakukan ini dengan sort
atau alat lain?
text-processing
sort
Caleb Xu
sumber
sumber
bin: bop boop
sebelumnyaboatkeeper: poughkeepsie
. Jika dua baris memiliki jumlah kata yang sama, saya lebih suka ikatannya diurutkan menurut abjad, tapi itu bukan keharusan.Jawaban:
Anda dapat melakukan sesuatu seperti:
Kami menggunakan
awk
untuk mengawali jumlah bidang untuk setiap baris. Kami kemudiansort
dengan nomor itu dan menghapusnya dengancut
.sumber
Dalam GNU baru-baru ini
awk
seseorang dapat menggunakanPROCINFO
array untuk mendefinisikan banyak parameter internal termasuk urutan di mana elemen array dicetak (dikontrol oleh elemen"sorted_in"
). Dengan demikian kita dapat membangun dan menyusun indeks dengan nilaiNF" "NR
, elemen mana yang memiliki nilai$0
dan mencetaknya dalam output yang diinginkan, dalam kasus Anda yaitu"@ind_num_desc"
:sumber
NF" "$0" "NR
Anda, Anda hanya akan memilikiNR
mekanisme penanganan mundur / duplikat.cmp_func()
- gnu awk memungkinkan itu.Perl one-liner:
Jika Anda ingin memutuskan hubungan menggunakan urutan alfabet:
sumber
Melalui python.
atau
sumber