GNU/Linux >> Belajar Linux >  >> Linux

Diurutkan dengan sort di baris perintah

Jika Anda pernah menggunakan aplikasi spreadsheet, maka Anda tahu bahwa baris dapat diurutkan berdasarkan isi kolom. Misalnya, jika Anda memiliki daftar pengeluaran, Anda mungkin ingin mengurutkannya menurut tanggal atau menurut harga naik atau menurut kategori, dan seterusnya. Jika Anda nyaman menggunakan terminal, Anda mungkin tidak ingin harus menggunakan aplikasi kantor besar hanya untuk menyortir data teks. Dan itulah yang sortir perintah untuk.

Memasang

Lebih banyak sumber daya Linux

  • Lembar contekan perintah Linux
  • Lembar contekan perintah Linux tingkat lanjut
  • Kursus online gratis:Ikhtisar Teknis RHEL
  • Lembar contekan jaringan Linux
  • Lembar contekan SELinux
  • Lembar contekan perintah umum Linux
  • Apa itu container Linux?
  • Artikel Linux terbaru kami

Anda tidak perlu memasang sort karena selalu disertakan pada sistem POSIX apa pun. Pada kebanyakan sistem Linux, sort perintah dibundel dalam kumpulan utilitas dari organisasi GNU. Pada sistem POSIX lainnya, seperti BSD dan Mac, default sort perintah bukan dari GNU, jadi beberapa opsi mungkin berbeda. Saya akan mencoba menjelaskan implementasi GNU dan BSD dalam artikel ini.

Urutkan baris menurut abjad

mengurutkan perintah, secara default, melihat karakter pertama dari setiap baris file dan menampilkan setiap baris dalam urutan abjad menaik. Jika dua karakter pada beberapa baris sama, itu mempertimbangkan karakter berikutnya. Misalnya:

$ cat distro.list
Slackware
Fedora
Red Hat Enterprise Linux
Ubuntu
Arch
1337
Mint
Mageia
Debian
$ sort distro.list
1337
Arch
Debian
Fedora
Mageia
Mint
Merah Hat Enterprise Linux
Slackware
Ubuntu

Menggunakan sortir tidak mengubah file asli. Sortir adalah filter, jadi jika Anda ingin menyimpan data Anda dalam bentuk yang diurutkan, Anda harus mengarahkan output menggunakan > atau kaos :

$ sort distro.list | tee distro.sorted
1337
Arch
Debian
[...]
$ cat distro.sorted
1337
Arch
Debian
[...]

Urutkan menurut kolom

Kumpulan data yang kompleks terkadang perlu diurutkan berdasarkan sesuatu selain huruf pertama dari setiap baris. Bayangkan, misalnya, daftar hewan dan spesies dan genus masing-masing, dan setiap "bidang" ("sel" dalam spreadsheet) ditentukan oleh karakter pembatas yang dapat diprediksi. Ini adalah format data yang umum untuk ekspor spreadsheet sehingga ekstensi file CSV (comma-separated values) ada untuk mengidentifikasi file tersebut (meskipun file CSV tidak harus dipisahkan koma, file yang dipisahkan juga tidak harus menggunakan ekstensi CSV agar valid dan dapat digunakan). Perhatikan contoh kumpulan data ini:

Aptenodytes;forsteri;Miller,JF;1778;Kaisar
Pygoscelis;papua;Wagler;1832;Gentoo
Eudyptula;minor;Bonaparte;1867;Biru Kecil
Spheniscus;demersus;Brisson;1760;Afrika
Megadyptes;antipodes;Milne-Edwards;1880;Mata kuning
Eudyptes;chrysocome;Viellot;1816;Southern Rockhopper
Torvaldis;linux;Ewing,L;1996;Tux

Dengan kumpulan data sampel ini, Anda dapat menggunakan --field-separator (gunakan -t pada BSD dan Mac—atau pada GNU untuk mengurangi pengetikan) opsi untuk menyetel karakter pembatas menjadi titik koma (karena contoh ini menggunakan titik koma, bukan koma, tetapi bisa menggunakan karakter apa pun), dan menggunakan --key (-k pada BSD dan Mac atau pada GNU untuk mengurangi pengetikan) opsi untuk menentukan bidang mana yang akan diurutkan. Misalnya, untuk mengurutkan berdasarkan bidang kedua (dimulai dari 1, bukan 0) dari setiap baris:

sort --field-separator=";" --key=2
Megadyptes;antipoda;Milne-Edwards;1880;Mata kuning
Eudyptes;chrysocome;Viellot;1816;Sothern Rockhopper
Spheniscus;demersus;Brisson;1760;Afrika
Aptenodytes;forsteri;Miller,JF;1778;Kaisar
Torvaldis;linux;Ewing,L;1996;Tux
Eudyptula;minor;Bonaparte;1867;Little Blue
Pygoscelis;papua;Wagler;1832;Gentoo

Agak sulit untuk dibaca, tetapi Unix terkenal dengan pipa metode pembuatan perintah, sehingga Anda dapat menggunakan kolom perintah untuk "mempercantik" output. Menggunakan GNU kolom :

$ sort --field-separator=";" \
--key=2 penguin.list | \
column --table --separator ";"
Megadyptes   antipodes   Milne-Edwards  1880  Yellow-eyes
Eudyptes     chrysocome  Viellot        1816  Southern Rockhopper    > Aptenyodytes Forsteri Miller, JF 1778 Kaisar
Torvaldis Linux Ewing, L 1996 Tux
Eudyptula Minor Bonaparte 1867 Little Blue
Pygoscelis Papua Wagler 1832 Gentoo

Sedikit lebih samar bagi pengguna baru (tetapi lebih pendek untuk mengetik), opsi perintah pada BSD dan Mac:

$ sort -t ";" \
-k2 penguin.list | Kolom -t -t -s ";"
Megadyptes Antipode Milne-Edwards 1880 Kuning-Eyed
Eudyptes Chrysocome Viellot 1816 Southern Rockhopper
Spheniscus Demersus Brisson 1760 Afrika
Aptenodytes Forsteri Miller, JF 1778 Kaisar
Torvaldis    linux       Ewing,L        1996  Tux
Eudyptula    minor       Bonaparte      1867  Biru Kecil
Pygoscelis   papua            

Kunci definisi tidak harus disetel ke 2 , tentu saja. Bidang apa pun yang ada dapat digunakan sebagai kunci pengurutan.

Urutan terbalik

Anda dapat membalik urutan daftar yang diurutkan dengan --reverse (-r di BSD atau Mac atau GNU untuk singkatnya):

$ sort --reverse alphabet.list
z
y
x
w
[...]

Anda dapat mencapai hasil yang sama dengan menyalurkan output dari sort through tac yang normal.

Mengurutkan berdasarkan bulan (khusus GNU)

Di dunia yang sempurna, setiap orang akan menulis tanggal menurut standar ISO 8601:tahun, bulan, hari. Ini adalah metode logis untuk menentukan tanggal yang unik, dan mudah dipahami oleh komputer. Namun cukup sering, manusia menggunakan cara lain untuk mengidentifikasi tanggal, termasuk bulan dengan nama yang cukup arbitrer.

Untungnya, GNU sort perintah bertanggung jawab untuk ini dan dapat mengurutkan dengan benar berdasarkan nama bulan. Gunakan --month-sort (-M ) pilihan:

$ cat month.list
November
Oktober
September
April
[...]
$ sort --month-sort bulan. daftar
Januari
Februari
Maret
April
Mei
[...]
November
Desember

Bulan dapat diidentifikasi dengan nama lengkap mereka atau sebagian dari nama mereka.

Urutan numerik yang dapat dibaca manusia (khusus GNU)

Titik kebingungan umum lainnya antara manusia dan komputer adalah kelompok angka. Misalnya, manusia sering menulis "1024 kilobyte" sebagai "1KB" karena lebih mudah dan lebih cepat bagi otak manusia untuk mengurai "1KB" daripada "1024" (dan semakin mudah semakin besar angkanya). Namun, untuk komputer, string seperti 9KB lebih besar dari, misalnya, 1MB (walaupun 9KB hanya sebagian kecil dari megabita). GNU sort perintah menyediakan --human-numeric-sort (-h ) untuk membantu mengurai nilai-nilai ini dengan benar.

$ daftar ukuran kucing
2M
12MB
1k
9k
900
7000
$ sort --human-numeric- sort
900
7000
1rb
9rb
2M
12MB

Ada beberapa inkonsistensi. Misalnya, 16.000 byte lebih besar dari 1 KB, tetapi sort gagal mengenali bahwa:

$ cat size0.list
2M
12MB
16000
1k
$ sort -h size0.list
16000
1k
2M
12MB

Logikanya, 16.000 harus ditulis 16KB dalam konteks ini, jadi GNU sort tidak sepenuhnya disalahkan. Selama Anda yakin bahwa angka Anda konsisten, --human-numeric-sort dapat membantu mengurai angka yang dapat dibaca manusia dengan cara yang ramah komputer.

Urutan secara acak (khusus GNU)

Terkadang utilitas menyediakan opsi untuk melakukan kebalikan dari apa yang seharusnya mereka lakukan. Di satu sisi, tidak masuk akal untuk sortir perintah untuk memiliki kemampuan untuk "mengurutkan" file secara acak. Kemudian lagi, alur kerja perintah menjadikannya fitur yang nyaman untuk dimiliki. Anda bisa gunakan perintah yang berbeda, seperti shuf , atau Anda bisa menambahkan opsi ke perintah yang Anda gunakan. Baik itu desain UX yang besar atau cerdik, GNU sort perintah menyediakan sarana untuk mengurutkan file secara sewenang-wenang.

Bentuk paling murni dari pengurutan arbitrer adalah --random-sort atau -R opsi (jangan bingung dengan -r opsi, yang merupakan kependekan dari --reverse ).

$ sort --random-sort alphabet.list
d
m
p
a
[...]

Anda dapat menjalankan pengurutan acak beberapa kali pada file untuk hasil yang berbeda setiap kali.

Diurutkan

Ada lebih banyak fitur yang tersedia dengan sort Perintah GNU dan BSD, jadi luangkan waktu untuk mengetahui opsinya. Anda akan terkejut melihat betapa fleksibelnya sortir bisa, terutama jika digabungkan dengan utilitas Unix lainnya.


Linux
  1. Bekerja dengan aliran data di baris perintah Linux

  2. Bekerja dengan pipa di baris perintah Linux

  3. Multi-Tugas di baris perintah dengan screenie

  1. Bagaimana Cara Mendapatkan Hitungan File Dalam Direktori Menggunakan Baris Perintah?

  2. Mencetak dari baris perintah dengan LibreOffice, perintah lpr?

  3. Bagaimana cara mendapatkan URL file Dropbox dari baris perintah?

  1. Selesaikan lebih banyak di baris perintah Linux dengan GNU Parallel

  2. Memanipulasi teks pada baris perintah dengan sed

  3. Bagaimana cara mendapatkan alamat IP saya dari baris perintah?