I'm menghadap ke besar 4-kolom file. I'd seperti untuk menampilkan diurutkan file di stdout berdasarkan kolom 3:
cat myFile | sort -u -k3
Apakah itu cukup untuk melakukan trik?
sort -k 3,3 myFile
akan menampilkan file diurutkan berdasarkan 3rd kolom dengan asumsi kolom dipisahkan oleh urutan kosong (ASCII SPC dan karakter TAB dalam POSIX/C lokal), menurut urutan yang ditetapkan oleh lokal saat ini.
Catatan yang terkemuka kosong included di kolom (default pemisah adalah transisi dari non-kosong kosong), yang dapat membuat perbedaan di terkenal di mana ruang-ruang yang tidak diabaikan untuk tujuan perbandingan, gunakan -b
pilihan untuk mengabaikan terkemuka kosong.
Perhatikan bahwa itu's benar-benar independen dari shell (semua kerang akan mengurai bahwa baris perintah yang sama, kerang umumnya don't memiliki semacam
perintah built in).
-k 3
adalah untuk mengurutkan pada bagian baris yang dimulai dengan 3rd kolom (termasuk terkemuka kosong). Dalam C lokal, karena ruang dan karakter tab jajaran sebelum semua karakter yang dapat dicetak, yang umumnya akan memberikan hasil yang sama seperti -k 3,3
(kecuali untuk garis-garis yang identik ketiga bidang),
-u
adalah untuk mempertahankan hanya satu baris jika ada beberapa jenis yang identik (yang mana jenis kunci jenis yang sama (yang's belum tentu sama seperti being equal)).
kucing
adalah perintah untuk conkucingenate. Anda don't perlu di sini.
Jika kolom dipisahkan oleh sesuatu yang lain, anda membutuhkan -t
pilihan untuk menentukan pemisah.
Diberikan contoh file a
$ cat a
a c c c
a b ca d
a b c e
a b c d
Dengan -u -k 3
:
$ echo $LANG
en_GB.UTF-8
$ sort -u -k 3 a
a b ca d
a c c c
a b c d
a b c e
Baris 2 dan 3 harus sama dengan kolom ketiga, tapi di sini semacam kunci dari ketiga kolom ke akhir baris, sehingga -u
tetap baik. ␠ca␠d
macam sebelum ␠c␠c
karena ruang yang diabaikan pada lulus pertama di lokal, cad
macam sebelum cc
.
$ sort -u -k 3,3 a
a b c d
a b c e
a b ca d
Di atas hanya satu yang dipertahankan untuk orang-orang di mana kolom 3 adalah ␠c
. Perhatikan bagaimana satu dengan ␠␠c
(2 menuju ruang) dipertahankan.
$ sort -k 3 a
a b ca d
a c c c
a b c d
a b c e
$ sort -k 3,3 a
a b c d
a c c c
a b c e
a b ca d
Melihat bagaimana urutan a b c d
dan c c c
dibalik. Dalam kasus pertama, karena ␠c␠c
macam sebelum ␠c␠d
, dalam kasus kedua karena memilah key adalah sama (␠c
), the last resort perbandingan yang membandingkan garis penuh menempatkan a b c d
sebelum c c c
.
$ sort -b -k 3,3 a
a b c d
a b c e
a c c c
a b ca d
Setelah kita mengabaikan kosong, semacam kunci untuk pertama 3 baris yang sama (c
), sehingga mereka diurutkan berdasarkan resort perbandingan.
$ LC_ALL=C sort -k 3 a
a b c e
a c c c
a b c d
a b ca d
$ LC_ALL=C sort -k 3,3 a
a b c e
a b c d
a c c c
a b ca d
Dalam C lokal, ␠␠c
macam sebelum ␠c
karena hanya ada satu pass ada di mana karakter (kemudian satu byte) urutkan berdasarkan kode nilai titik (di mana ruang yang lebih rendah code point dari c
).
Jika anda memahami "kolom" seperti dalam file teks (4 karakter) maka ya, anda solusi harus bekerja (atau bahkan sort-u -k3 myFile
memungkinkan semacam
melakukan beberapa memori hemat magics dengan random access). Jika anda memahami "kolom" seperti dalam database - seluruh entitas data yang diikuti oleh pemisah, dan variabel lebar kolom, anda'll perlu sesuatu yang lebih menarik misalnya ini macam ls -l dengan ukuran
ls -l |awk '{print $5 " " $0;}'| sort -n | cut -d " " -f 2-
(yang setara dengan sepele ls -lS
, tetapi menyajikan contoh yang baik.)
sort -g -k column_number
adalah perintah untuk mengurutkan setiap daftar memiliki karakter numerik menggunakan kolom tertentu
sort -t : -k 3 filename
ketika anda pembatas adalah :
dan anda perlu untuk mengurutkan file filename
3rd lapangan.
Anda dapat menggunakan awk Velour perpustakaan:
#!/usr/local/bin/velour -f
{
q[NR] = $3
z[NR] = $0
}
END {
a_sort_by(q, z)
io_puts(q)
}
$ sort -k 1.3,1.3 myfile
Akan mengurutkan file myfile pada kolom ketiga jika file anda don't memiliki pemisah.
$ cat myfile
ax5aa
aa3ya
fg7ds
pp0dd
aa1bb
$ sort -k 1.3,1.3 myfile
pp0dd
aa1bb
aa3ya
ax5aa
fg7ds
halaman semacam:
[...] -k, --key=POS1[,POS2] memulai kunci di POS1 (asal 1), akhirnya di POS2 (default end of line) [...] POS adalah F[.C][MEMILIH], dimana F adalah jumlah lapangan dan C posisi karakter di lapangan, keduanya asal 1. Jika tidak -t atau -b adalah, karakter di sebuah lapangan yang dihitung dari awal sebelumnya spasi. MEMILIH satu atau lebih single-surat memesan pilihan, yang menimpa global memesan pilihan untuk kunci itu. Jika tidak ada tombol yang diberikan, menggunakan seluruh line sebagai kunci.
Dengan-kunci=1.3,1.3, anda mengatakan bahwa tidak hanya satu bidang (seluruh baris) dan bahwa anda're membandingkan ketiga posisi karakter dari bidang ini.