Dengan menyusun, anda boleh memesan fail berdasarkan susunan dalam kamus atau berdasarkan nilai berangka, mengacak baris fail, menghapus baris pendua, dan memeriksa apakah fail disusun.
Anda mungkin dapat melakukan perkara lain dengannya tetapi pertama, mari kita bimbang tentang membungkus kepala kita tentang cara menggunakan semacam dalam skrip bash.
Apa jenis?
Urutkan adalah arahan luaran yang menggabungkan fail sambil menyusun isinya mengikut jenis urutan dan menulis hasil dari jenis ke output standard.
Susun pilihan arahan untuk bash
Perintah urut hadir dengan 31 pilihan (13 utama dan 18 dikategorikan sebagai lain). Pengaturcaraan bash yang paling berpengalaman (bahkan pakar) hanya mengetahui beberapa pilihan jenis utama yang diperlukan untuk mendapatkannya. Yang lain jarang tersentuh. Beruntung untuk anda, kami mempunyai masa untuk menyentuh mereka semua.
Pilihan jenis utama
Ini adalah pilihan yang membantu anda menyelesaikan sesuatu dan menyusun (Menyusun) di samping memanipulasi hasil yang disusun (Pemprosesan pos) dan menerapkan penapis (Penapis) sebelum menyusun.
Menyusun
Urutan disertakan dengan 5 jenis penyortiran yang berbeza. Berikut adalah jadual yang menunjukkan setiap jenis jenis dengan pilihan yang berkaitan.
Susun | Pilihan pendek / pilihan panjang / dll perkataan |
Urutan angka (umum) | -g / -general-numerik-urutkan umum-angka sokongan untuk notasi saintifik 0.1234e4 = 1234 |
Jenis angka (manusia) | -h / -jenis-angka-manusia angka-manusia 1.234K = 1234 |
Berangka | -n / -penyusun nombor berangka … < -1 < 0 < 1 <… |
Sebulan | -Jenis / M-bulan bulan Tidak diketahui < Jan < Feb <… < Nov < Dec |
Secara rawak | -r / -rawak-urutkan rawak |
Versi | -V / -versi-jenis versi |
Perhatikan bahawa setiap jenis jenis mempunyai pilihan panjang yang diakhiri dengan -sort. Sebagai tambahan kepada pilihan pengisihan tertentu, pilihan -sort = WORD boleh digunakan untuk menyusun mengikut kata. Contohnya -sort = random boleh digunakan sebagai pengganti -random-sort atau -r.
Contoh
Berikut adalah beberapa contoh arahan urutan untuk setiap kaedah penyortiran.
Contoh) Menyusun nama
Isih tidak mempunyai masalah menyusun baris mengikut abjad. Pertimbangkan senarai orang terkenal yang tidak disusun.
Fungsi
orang terkenal()curl - senyap https: // www.biografi dalam talian.bersih / orang / terkenal-100.html
| kandungan kandungan grep | sed-e /<[^>] *.// g '-e' s / WWII // g '-e' s / \ (Wilbur \)
/ \ 1 Wright / '| grep -o -e '\ (\ ([A-Z] \ + [.] \?\) \ + [a-z] * \ s \) \ + ([0-9] \ + \ s [^)] \+.'
Garis arahan
terkenal-orang | mengurutPengeluaran
Stephen King (1947 -)Steve Jobs (1955 - 2012)
Sting (1951 -)
Tiger Woods (1975 -)
Tom Cruise (1962 -)
Usain Bolt (1986 -)
Vinci (1452 - 1519)
Walt Disney (1901 - 1966)
Wilbur Wright (1867 - 1912)
Woodrow Wilson (1856 - 1924)
Contoh) Jenis numerik am
Sekiranya kita perlu menyusun nilai numerik dengan mengambil kira notasi saintifik seperti 99e2, kita dapat menggunakan urutan angka umum.
Fungsi
tidak disusun-angka-nilai ()seq 100 | susun - jenis-rawak | sed '3i 9e2' | sed '3i 99K'
Pertimbangkan output yang disusun menggunakan setiap kaedah. Perhatikan bahawa selain mengandung nilai 1 hingga 100, daftar ini juga termasuk '9e12' (900) dan '99K' (99000).
Garis arahan
tidak disusun-angka-angka | urutkan -nPengeluaran
9697
98
99
99K
100
Bagaimana dengan 900 dan 99000. Betul, ia hanyalah angka. Seterusnya.
Garis arahan
tidak disusun-angka-angka | urutkan -hPengeluaran
9697
98
99
100
99K
Bagaimana dengan 900. Betul, itu hanya jenis angka manusia. Seterusnya.
Garis arahan
tidak disusun-angka-nilai | urutkan -gPengeluaran
9697
98
99
99K
100
9e2
Bagaimana dengan 99000. Betul itu hanya jenis angka umum. Seperti yang anda lihat, kaedah penyortiran tidak sesuai dalam kes ini; namun, itu tidak bermakna anda tidak boleh membuat keputusan.
Garis arahan
tidak disusun-angka-angka | sed 's / [kK] / e3 /' | urutkan -gPengeluaran
9697
98
99
100
9e2
99e3
Sekarang lebih seperti itu.
Contoh) Jenis angka manusia
Sekiranya kita perlu menyusun nilai numerik dengan mengambil kira makna notasi seperti K, G, M, dan E, kita dapat menggunakan urutan angka manusia.
Garis arahan
seq 100 | susun - jenis-rawak | sed '3i 3k' | urutkan -hPengeluaran
9697
98
99
100
3k
Contoh) Jenis angka
Sekiranya semua yang kita perlukan adalah mengisih bilangan bulat, urut angka adalah muslihatnya.
Garis arahan
seq 100 | susun - jenis-rawak | urutkan --numerik-urutkanPengeluaran
9596
97
98
99
100
Contoh) Jenis bulan
Urutan bulan membolehkan anda memesan baris mengikut bulan. Ini boleh menjadi berguna untuk mengelompokkan baris bersama-sama berdasarkan bulan terutamanya sekiranya pilihan untuk menyusun mengikut waktu tidak tersedia.
Fungsi
bulan ()kucing <
Feb
Mac
Apr
Mungkin
Jun
Jul
Ogos
Sep
Okt
Nov
Dis
EOF
Anggaplah bulan itu tidak disusun.
Garis arahan
bulan | urutkan - urut secara rawakPengeluaran
MacOkt
Dis
Apr
Mungkin
Sep
Ogos
Nov
Jul
Jan
Feb
Jun
Kita selalu dapat menyusun mengikut bulan.
Garis arahan
bulan | susun - jenis-rawak | urutkan - sebilangan bulanPengeluaran
JanFeb
Mac
Apr
Mungkin
Jun
Jul
Ogos
Sep
Okt
Nov
Dis
Perhatikan bahawa jika kita mengubah Desember menjadi substring pada bulan November mengatakan 'Novem', ia akan muncul setelah 'Nov' dalam output yang disusun.
Contoh) Urut secara rawak - bunuh terminal orang lain
Seperti yang dijangkakan, urutan rawak berlawanan dengan menyusun, mencampuradukkan garis.
Katakan bahawa untuk tujuan pendidikan kita mahu membunuh pengguna lain. Kita harus memastikan bahawa itu bukan masalah kita dan mengacak senarai supaya lebih baik dan kita boleh mengatakan bahawa pty dipilih secara rawak.
Perintah
mesej-pty ()pty tempatan;
pty = "$ 1"
;
echo -n "Anda akan turun"> / dev / $ pty;
untuk i dalam 5 4 3 2 1;
buat
tidur 1;
echo -n "$ i"> / dev / $ pty;
selesai;
gema "Bye!"> / dev / $ pty;
tidur 1
ps | grep pty | grep -v -e $ (mypty) | susun - jenis-rawak | kepala -1> stdin;
mesej-pty $ (pty < stdin );
bunuh $ (pid < stdin )
Keluaran di terminal orang lain
Anda akan turun dalam 5 4 3 2 1 Bye!]
(keluar)
Contoh) Urutan versi - menyusun ips
Seperti yang anda ketahui, fail sumber boleh diformat menggunakan rentetan seperti 1.0. Tambahan pula, versi mungkin lebih mendalam dengan nombor versi seperti 1.0.0 seperti yang dilihat dalam skema versi semantik yang popular.
Penyortiran versi membolehkan anda menyusun nombor versi. Hebat! Bagaimana sekarang? Mari kita mengujinya.
Untuk contoh ini, saya telah menyiapkan skrip bash untuk menghasilkan ips rawak sehingga kita tidak perlu pergi ke sana. Ada di repo. Bagi kita yang tidak mempunyai repo inilah permulaan yang pantas.
Perintah
klon git https: // github.com / faaosoempemp3 / linuxhint.com.gitalias random-ips = 'test -f "linuxhint.com / menghasilkan-rawak-ips.sh "; bash $ _ '
Sekarang anda sudah bersedia, mari kita mulakan.
Garis arahan
rawak-ips 200 | tee ipsPengeluaran
199.174.177.98180.33.247.107
87.130.125.109
76.86.8.20
162.41.183.150
226.58.10.196
83.121.11.145
80.199.197.19
44.214.89.52
185.174.143.111
Baiklah, ia berfungsi. Sekarang mari kita lihat apa yang berlaku semasa kita mencuba dan menyusun ips.
Garis arahan
urutkan ipsPengeluaran
76.88.194.1578.96.11.181
82.169.213.206
84.218.132.51
84.3.101.97
87.137.131.40
87.59.32.91
89.149.111.242
97.121.162.244
98.145.130.186
Pada pandangan pertama, ia kelihatan berfungsi tetapi garis seperti 8.96.11.181 mesti muncul di tempat lain.
Perintah
untuk o in d h n V g M
buat
urutkan ips - $ o> ips $ o ,,
selesai
gema semua jenis nombor sama
diff ips n, d 1> / dev / null || susunan kamus echo != urutan angka
diff ips n, h 1> / dev / null || gema nombor berangka manusia != urutan angka
diff ips n, g 1> / dev / null || echo jenis numerik am != urutan angka
diff ips n, v 1> / dev / null ||
jenis versi echo != urutan angka
show_n_v_ips_diff = "benar"
ujian ! "$ show_n_v_ips_diff" || perbezaan ips n, v
Pengeluaran
macam-macam sama jenis angkapesanan kamus != urutan angka
jenis versi != urutan angka
13,14d12
< 44.221.43.20
< 44.27.108.172
15a14,15
> 44.27.108.172
> 44.221.43.20
27d26
< 84.218.132.51
29c28
< 87.137.131.40
Seperti yang anda lihat jenis versi membolehkan anda menyusun nombor versi apabila kaedah penyortiran lain gagal.
Contoh) Urut versi - menyusun nama fail dengan nombor versi
Berdasarkan contoh terakhir, mari kita gunakan versi semacam lebih dekat dengan tujuannya. Seperti yang anda ketahui, nombor versi biasanya muncul dalam nama fail. Lihat Butiran mengenai jenis versi.
Pertama, mari kita ubah ips menjadi fail sumber projek seperti yang lain.
Perintah
alpha ()alpha = "abcdefghijklmnopqrstuvwxyz";
echo -n $ alpha: $ ((RANDOM% 26)): 1
beta ()
alpha = "ab";
echo -n $ alpha: $ ((RANDOM% 2)): 1
kucing ips | sambil membaca baris -r; buat
echo $ (alpha) -v $ line $ (uji $ ((RANDOM% 5)) -eq 0 || beta).tar.gz;
selesai | tee meneguk
Pengeluaran
x-v56.16.109.54.tar.gzk-v117.38.14.165a.tar.gz
d-v87.59.32.91a.tar.gz
h-v115.215.64.100.tar.gz
s-v72.174.246.218b.tar.gz
h-v163.93.19.173.tar.gz
u-v184.225.11.92b.tar.gz
y-v205.53.5.211a.tar.gz
t-v175.196.164.17b.tar.gz
e-v167.42.221.178b.tar.gz
c-v126.54.190.189b.tar.gz
b-v169.180.221.131a.tar.gz
y-v210.125.170.231a.tar.gz
x-v71.56.120.9b.tar.gz
Senaman
Jadikan perintah di atas berjalan lebih cepat menggunakan xargs
Lihat contoh cara menggunakan perintah xargs dalam skrip bash.
Kali ini, kita tidak akan repot-repot menggunakan kaedah penyortiran lain.
Garis arahan
urutkan -V menghirupPengeluaran
d-v127.100.108.192.tar.gze-v62.140.229.42a.tar.gz
e-v149.77.211.215a.tar.gz
e-v167.42.221.178b.tar.gz
e-v194.189.236.29a.tar.gz
e-v198.145.199.84b.tar.gz
e-v240.1.147.196b.tar.gz
f-v50.100.142.42b.tar.gz
f-v117.58.230.116.tar.gz
f-v139.17.210.68b.tar.gz
f-v153.18.145.133b.tar.gz
g-v201.153.203.60b.tar.gz
g-v213.58.67.108.tar.gz
h-v5.206.37.224.tar.gz
Sekarang anda melihat bahawa jenis versi mungkin berguna ketika menyusun nama fail dengan nombor versi.
Pre sort
Susun mempunyai empat pilihan utama yang mempengaruhi penyortiran sebenar iaitu, -ignore-terkemuka-kosong, -ignore-case, -ignore-nonprinting, dan -dictionary-order, yang mungkin atau mungkin tidak bertindih. Contoh menggunakan setiap pilihan ikuti.
Isih mengabaikan kekosongan utama
Isih membolehkan ruang kosong input diabaikan sebagai pilihan. Kekosongan utama disimpan dalam output yang disusun.
Pilihan
--mengabaikan-memimpin-kosongPenggunaan
urutkan - kosong-terkemuka-utamaPerintah
terkenal-orang> fpkucing >> fp << EOF
Marilyn Monroe (1926 - 1962)
Abraham Lincoln (1809 - 1865)
EOF
kucing fp | urutkan | tac
Pengeluaran
Alfred Hitchcock (1899 - 1980)Albert Einstein (1879 - 1955)
Al Gore (1948 -)
Abraham Lincoln (1809 - 1865)
Marilyn Monroe (1926 - 1962)
Abraham Lincoln (1809 - 1865)
Perhatikan bahawa ruang utama dalam baris yang ditambahkan ke fp muncul pertama dalam output semacam.
Untuk membetulkannya, kita perlu mengabaikan kekosongan utama seperti berikut.
Perintah
terkenal-orang> fpkucing >> fp << EOF
Marilyn Monroe (1926 - 1962)
Abraham Lincoln (1809 - 1865)
EOF
kucing fp | urutkan - kosong-terkemuka-kosong-kosong-terkemuka-kosong | tac
Pengeluaran
Marilyn Monroe (1926 - 1962)Marilyn Monroe (1926 - 1962)
Marie Antoinette (1755 - 1793)
…
Albert Einstein (1879 - 1955)
Al Gore (1948 -)
Abraham Lincoln (1809 - 1865)
Abraham Lincoln (1809 - 1865)
Alternatif
kucing fp | sed 's / ^ \ s * //' | urutkan | tacPerhatikan bahawa alternatif tidak mengekalkan kekosongan utama dalam output semacam.
Susun kes yang tidak diendahkan
Susun membolehkan kes input diabaikan sebagai pilihan. Kes ini disimpan dalam output yang disusun.
Pilihan
--abaikan-kesPenggunaan
urutkan - kes-kesignorePerintah
terkenal-orang> fpkucing >> fp << EOF
abraham Lincoln (1809 - 1865)
ABraham Lincoln (1809 - 1865)
EOF
kucing fp | urutkan | tac
Pengeluaran
Amelia Earhart (1897 - 1937)Alfred Hitchcock (1899 - 1980)
Albert Einstein (1879 - 1955)
Al Gore (1948 -)
Abraham Lincoln (1809 - 1865)
ABraham Lincoln (1809 - 1865)
Perhatikan bahawa ruang utama dalam baris yang ditambahkan ke fp muncul pertama dalam output semacam.
Untuk membetulkannya, kita perlu mengabaikan kekosongan utama seperti berikut.
Perintah
terkenal-orang> fpkucing >> fp << EOF
abraham Lincoln (1809 - 1865)
ABraham Lincoln (1809 - 1865)
EOF
kucing fp | urutkan - kes-kesignore | tac
Pengeluaran
Amelia Earhart (1897 - 1937)Alfred Hitchcock (1899 - 1980)
Albert Einstein (1879 - 1955)
Al Gore (1948 -)
Abraham Lincoln (1809 - 1865)
abraham Lincoln (1809 - 1865)
ABraham Lincoln (1809 - 1865)
Alternatif
kucing fp | sambil membaca baris -r; gema $ line ,,; selesai | urutkan | tacPerhatikan bahawa alternatif tidak menyimpan kes dalam output semacam.
Isih tanpa mengira pencetakan
Isih membolehkan input yang tidak dicetak diabaikan sebagai pilihan. Nonprinting disimpan dalam output yang disusun.
Pilihan
--abaikan-tidak mencetakPenggunaan
menyusun --ignore-nonprintingPerintah
terkenal-orang> fpecho -e "\ x90Abe" >> fp
kucing fp | urutkan | tac
Pengeluaran
Audrey Hepburn (1929 - 1993)Angelina Jolie (1975 -)
Amelia Earhart (1897 - 1937)
Alfred Hitchcock (1899 - 1980)
Albert Einstein (1879 - 1955)
Al Gore (1948 -)
Abraham Lincoln (1809 - 1865)
Nampaknya kita tidak mempunyai watak 'Abe' untuk mencetak watak dalam input semacam.
Untuk membetulkannya, kita perlu mengabaikan watak yang tidak dicetak.
Perintah
terkenal-orang> fpecho -e "\ x90Abe" >> fp
kucing fp | urutkan --ignore-nonprinting | tac
[/ cc \
Pengeluaran
[cc lang = "bash"]
Amelia Earhart (1897 - 1937)
Alfred Hitchcock (1899 - 1980)
Albert Einstein (1879 - 1955)
Al Gore (1948 -)
Abraham Lincoln (1809 - 1865)
▒Boleh
Susun urutan kamus
Urutkan membolehkan semua input diabaikan kecuali spasi dan aksara alfanumerik sebagai pilihan. Input dikekalkan dalam output yang disusun.
terkenal-orang> fpecho -e "\ x90Abe" >> fp
kucing fp | urutkan --d | tac
Hantar siaran
Urutkan mempunyai satu pilihan utama yang tidak mempengaruhi penyortiran iaitu, -reverse. Walau bagaimanapun, ia mempengaruhi output, membiarkan urutan beralih antara menaik dan menurun. Contohnya berikut.
Isih output terbalik
Urutkan membolehkan output ditampilkan dalam urutan terbalik sebagai pilihan.
Pilihan
--terbalikPenggunaan
urutkan - terbalikGaris arahan
terkenal-orang | urutkan - terbalikPengeluaran
Angelina Jolie (1975 -)Amelia Earhart (1897 - 1937)
Alfred Hitchcock (1899 - 1980)
Albert Einstein (1879 - 1955)
Al Gore (1948 -)
Abraham Lincoln (1809 - 1865)
Alternatif
urutkan | tacPilihan lain untuk mengurutkan
Terdapat dua puluh dua pilihan lain. Contohnya diikuti.
Susun semak
Urutkan mempunyai pilihan yang membolehkan anda memeriksa apakah input disusun. Ia kembali selepas contoh pertama baris yang tidak disusun. Sekiranya input diperlukan untuk disusun tetapi kemungkinan sudah teratur, menggunakan pemeriksaan semacam itu sesuai.
Pilihan
--periksaPenggunaan
urutkan - semakGaris arahan
seq 10 | susun - jenis-rawak | urutkan - semakPengeluaran
urutkan: -: 3: gangguan: 10Garis arahan
seq 10 | susun - jenis-rawak | urutkan | urutkan - semakPengeluaran
(kosong)Isih output
Urutkan mempunyai pilihan yang membolehkan anda menentukan fail untuk ditulis dan bukannya menggunakan output standard atau pengalihan semula. Penggunaannya dapat meningkatkan keserasian di seluruh persekitaran skrip.
Pilihan
--output = FILEPenggunaan
urutkan - output = FILEGaris arahan
seq 10 | urutkan - rawak-jenis - output = rawak-10Pengeluaran
(kosong)Isih batal ditamatkan
Urutkan mempunyai pilihan yang membolehkan anda menetapkan pembatas garis menjadi nol dan bukannya garis baru.
Pilihan
--ditamatkan sifarPenggunaan
urutkan - ditamatkan sifarGaris arahan
seq 10 | tr '\ 012' '\ 000' | urutkan - diakhiri sifar - urut secara rawakPengeluaran
25346178910Isih stabil
Urutkan mempunyai pilihan yang membolehkan anda melumpuhkan perbandingan pilihan terakhir. Akibatnya, jangka masa yang lebih stabil dapat dicapai sekiranya input yang cukup besar dapat menyebabkan proses berjalan tidak stabil.
Pilihan
--stabilPenggunaan
susun - stabilGaris arahan
masa seq 1000000 | susun - jenis-rawak | susun --stabil> / dev / nullPengeluaran
sebenar 0m9.138anpengguna 0m9.Tahun 201an
sys 0m0.107s
Susun ukuran penyangga
Urutkan mempunyai pilihan yang membolehkan anda menetapkan jumlah memori yang digunakan sebagai penyangga semasa menyusun. Ini dapat digunakan untuk membatasi penggunaan memori menyusun input yang lebih besar. Prestasi mungkin terjejas.
Pilihan
--ukuran penyangga = SAIZPenggunaan
susun - ukuran belian = 64Garis arahan
masa seq 1000000 | urut-rawak-urut | sort -stable -buffer-size = 64> / dev / null
Pengeluaran
sebenar 0m21.685anpengguna 0m9.858-an
sys 0m2.092s
Susun unik
Urutkan mempunyai pilihan yang membolehkan anda membuang baris pendua dalam output semacam
Pilihan
--unikPenggunaan
jenis - unikGaris arahan gema 1 2 2 4 5 | tr '\ 040' '\ 000' | susun - ditamatkan sifar - unik
Pengeluaran
1245Alternatif
urutkan | uniqKesimpulannya
Urutkan adalah perintah luaran yang berguna bukan hanya ketika digunakan dalam kombinasi dengan perintah luaran yang lain tetapi juga berguna ketika digunakan dengan perintah tanpa kaedah pesanan terbina dalam seperti fungsi yang ditentukan pengguna atau skrip bash secara umum.