Saya memiliki data dengan format berikut:
foo<tab>1.00<space>1.33<space>2.00<tab>3
Sekarang saya mencoba untuk mengurutkan file berdasarkan bidang terakhir yang semakin berkurang. Saya mencoba perintah berikut tetapi tidak diurutkan seperti yang kami harapkan.
$ sort -k3nr file.txt # apparently this sort by space as delimiter
$ sort -t"\t" -k3nr file.txt
sort: multi-character tab `\\t'
$ sort -t "`/bin/echo '\t'`" -k3,3nr file.txt
sort: multi-character tab `\\t'
Apa cara yang benar untuk melakukannya?
Berikut adalah contoh data .
linux
unix
sorting
tab-delimited
neversaint
sumber
sumber
'"'"'
untuk menggunakannya di dalam alias.awk '{print $0 | "sort -nr" > "outfile" }' datafile
, kecuali dengan delimeter tab yang lolos dikirim ke perintah sortir.Secara default pembatas bidang adalah transisi non-blank to blank sehingga tab akan berfungsi dengan baik.
Namun, kolom diindeks basis 1 dan basis 0 sehingga Anda mungkin mau
untuk mengurutkan file.txt dengan kolom 4 secara numerik dalam urutan terbalik. (Meskipun data dalam pertanyaan tersebut bahkan memiliki 5 bidang sehingga bidang terakhir adalah indeks 5.)
sumber
Anda harus meletakkan karakter tab yang sebenarnya setelah -t \ dan untuk melakukannya di shell Anda menekan ctrl-v dan kemudian karakter tab. Kebanyakan shell yang saya gunakan mendukung mode entri tab literal ini.
Berhati-hatilah, karena menyalin dan menempel dari tempat lain umumnya tidak mempertahankan tab.
sumber
C-q <tab>
misalnya. Saya pikir itu^V
di nano juga.Solusi $ tidak bekerja untuk saya. Namun, dengan benar-benar menempatkan karakter tab itu sendiri di perintah lakukan: sort -t '' -k2
sumber
<C-v><Tab>
untuk memasukkan tab jika kunci tab digunakan untuk pelengkapan otomatis di shell Anda.$'\t'
berfungsi dalam ksh, zsh, dan bash. Shell Bourne tidak mendukungnya. Lihat posting ini: unix.stackexchange.com/a/371873/201820pipa melalui sesuatu seperti
awk '{ print print $1"\t"$2"\t"$3"\t"$4"\t"$5 }'
. Ini akan mengubah spasi menjadi tab.sumber
Secara umum menyimpan data seperti ini bukan hal yang baik untuk dilakukan jika Anda bisa menghindarinya, karena orang selalu membingungkan tab dan spasi.
Memecahkan masalah Anda sangat mudah dalam bahasa scripting seperti Perl, Python atau Ruby. Berikut beberapa contoh kode:
sumber
Saya ingin solusi untuk pengurutan Gnu di Windows, tetapi tidak ada solusi di atas yang bekerja untuk saya di baris perintah.
Menggunakan petunjuk Lloyd, file batch berikut (.bat) bekerja untuk saya.
Ketikkan karakter tab di dalam tanda kutip ganda.
sumber
Saya mengalami masalah ini dengan mengurutkan cygwin di shell bash saat menggunakan 'general-numeric-sort'. Jika saya menentukan
-t$'\t' -kFg
, di mana F adalah nomor bidang, itu tidak berfungsi, tetapi ketika saya menentukan keduanya-t$'\t'
dan-kF,Fg
(misalnya-k7,7g
untuk bidang ke-7) itu berhasil.-kF,Fg
tanpa-t$'\t'
tidak berhasil.sumber
Jika Anda ingin membuatnya lebih mudah dengan hanya memiliki tab, ganti spasi dengan tab:
sumber
usage: tr [-Ccsu] string1 string2
tr string1 string2 <some-file
. Semuanya bisa membaca file asalkan bisa membaca stdin.Jawaban Lars Haugseth hanya bekerja dari baris perintah untuk saya di mana ia memberikan kesalahan ini jika dijalankan dari skrip shell:
sortir: tab multi-karakter '$ \ t'
Solusinya jika dikodekan dalam skrip shell jika ada yang mencari
karakter tab ada di antara kutipan.
sumber