Ketika kita menggunakan sort fileperintah, file memperlihatkan isinya dengan cara diurutkan bagaimana jika saya tidak ingin mendapatkan output apa pun selain file yang diurutkan?
Harap perbarui pertanyaan Anda untuk dengan jelas menjelaskan apa yang ingin Anda lakukan dengan hasil pengurutan file. Apakah Anda ingin menyortirnya di tempat, mengganti konten yang tidak disortir filedengan konten yang diurutkan dari file yang sama? Cara pertanyaan Anda saat ini dinyatakan, tidak melakukan apa-apa sama sekali adalah jawaban yang benar (Anda tidak ingin keluaran apa pun, jadi jangan lakukan apa-apa).
Keith Thompson
@KeithThompson terima kasih atas perhatian Anda sebenarnya, saya mencoba untuk mengurutkan file tetapi ingin menghindari output di layar.
Ali Sajid
Jadi ke mana Anda ingin outputnya pergi? Ke dalam file baru? Ke dalam file asli? Ke printer di ujung lorong?
Keith Thompson
1
Ke dalam file orignal
Ali Sajid
jalankan sort infile >outfiledan Anda akan mendapatkan output yang diurutkan ke dalam file "outfile". Kemudian Anda dapat menghapus "infile" asli dan semuanya akan beres.
Luis Colorado
Jawaban:
409
Anda dapat menggunakan pengalihan file untuk mengarahkan ulang hasil yang diurutkan:
sort input-file > output_file
Atau Anda dapat menggunakan -o, --output=FILEpilihan semacam untuk menunjukkan yang sama input dan output file:
sort -o file file
Catatan: Kesalahan umum adalah mencoba mengalihkan output ke file input yang sama (misalnya sort file > file). Ini tidak berfungsi karena shell membuat pengalihan (bukan program sort (1) ) dan file input (sebagai output juga) akan dihapus sebelum memberikan program sortir (1) kesempatan membacanya.
Ini sangat berguna ketika Anda perlu mengedit kamus secara manual untuk LaTeX, +1
Bryson S.
6
Hanya untuk menyebutkan pentingnya pesanan. Dari GNU sorthalaman info: -o OUTPUT-FILE' --output = OUTPUT-FILE 'Tulis output ke OUTPUT-FILE alih-alih output standar. Pada sistem yang lebih baru, -o' cannot appear after an input file if POSIXLY_CORRECT 'diatur, misalnya, sort F -o F'. Portable scripts should specify -o OUTPUT-FILE' sebelum file input apa pun.
Yassine ElBadaoui
14
Untuk menghindari pengulangan nama file:sort -o file{,}
tstenner
65
The sortperintah mencetak hasil operasi penyortiran ke output standar secara default. Untuk mencapai jenis "di tempat", Anda dapat melakukan ini:
sort -o file file
Ini menimpa input filedengan output yang diurutkan. The -oswitch, digunakan untuk menentukan output, didefinisikan oleh POSIX , sehingga harus tersedia pada semua versi sort:
-o Tentukan nama file output yang akan digunakan, bukan output standar. File ini bisa sama dengan salah satu file input.
Jika Anda kurang beruntung memiliki versi sorttanpa -osaklar ( Luis meyakinkan saya bahwa mereka ada), Anda dapat mencapai hasil edit "di tempat" dengan cara standar:
Ini juga berfungsi di Ubuntu setelah menginstal dengansudo apt install moreutils
Serge Stroobandt
4
Untuk mengurutkan file di tempat, coba:
echo "$(sort your_file)"> your_file
Seperti yang dijelaskan dalam jawaban lain, Anda tidak dapat langsung mengarahkan kembali output ke file input. Tetapi Anda dapat mengevaluasi sortperintah pertama dan kemudian mengarahkannya kembali ke file asli. Dengan cara ini Anda bisa menerapkan pengurutan di tempat.
Demikian pula, Anda juga dapat menerapkan trik ini ke perintah lain seperti pasteuntuk menerapkan penambahan baris-bijaksana.
Ini buruk karena tidak akan berfungsi untuk file besar, strip mengakhiri baris baru, echodapat mengacaukan backslash lolos di POSIX, dan -otidak bekerja untuk file yang sama dengan input seperti yang dijelaskan di: stackoverflow.com/a/29244387/895245
Ciro Santilli 郝海东冠状 病 六四 事件 法轮功
4
Inilah pendekatan yang (ab) gunakan vim:
vim -c :sort -c :wq -E -s "${filename}"
The -c :sort -c :wqmemanggil porsi perintah untuk vim setelah file terbuka. -Edan -sdiperlukan agar vim dijalankan dalam mode "headless" yang tidak menarik ke terminal.
Ini hampir tidak ada manfaatnya daripada sort -o "${filename}" "${filename}"pendekatan kecuali bahwa hanya mengambil argumen nama file sekali.
Ini berguna bagi saya untuk menerapkan formatterarahan dalam nanorcentri untuk .gitignorefile. Inilah yang saya gunakan untuk itu:
syntax "gitignore""\.gitignore$"
formatter vim -c :sort -c :wq -E -s
file
dengan konten yang diurutkan dari file yang sama? Cara pertanyaan Anda saat ini dinyatakan, tidak melakukan apa-apa sama sekali adalah jawaban yang benar (Anda tidak ingin keluaran apa pun, jadi jangan lakukan apa-apa).sort infile >outfile
dan Anda akan mendapatkan output yang diurutkan ke dalam file "outfile". Kemudian Anda dapat menghapus "infile" asli dan semuanya akan beres.Jawaban:
Anda dapat menggunakan pengalihan file untuk mengarahkan ulang hasil yang diurutkan:
Atau Anda dapat menggunakan
-o
,--output=FILE
pilihan semacam untuk menunjukkan yang sama input dan output file:Catatan: Kesalahan umum adalah mencoba mengalihkan output ke file input yang sama (misalnya
sort file > file
). Ini tidak berfungsi karena shell membuat pengalihan (bukan program sort (1) ) dan file input (sebagai output juga) akan dihapus sebelum memberikan program sortir (1) kesempatan membacanya.sumber
GNU sort
halaman info:-o OUTPUT-FILE'
--output = OUTPUT-FILE 'Tulis output ke OUTPUT-FILE alih-alih output standar. Pada sistem yang lebih baru,-o' cannot appear after an input file if
POSIXLY_CORRECT 'diatur, misalnya,sort F -o F'. Portable scripts should specify
-o OUTPUT-FILE' sebelum file input apa pun.sort -o file{,}
The
sort
perintah mencetak hasil operasi penyortiran ke output standar secara default. Untuk mencapai jenis "di tempat", Anda dapat melakukan ini:Ini menimpa input
file
dengan output yang diurutkan. The-o
switch, digunakan untuk menentukan output, didefinisikan oleh POSIX , sehingga harus tersedia pada semua versisort
:Jika Anda kurang beruntung memiliki versi
sort
tanpa-o
saklar ( Luis meyakinkan saya bahwa mereka ada), Anda dapat mencapai hasil edit "di tempat" dengan cara standar:sumber
Ini ada dalam paket Fedora berikut:
sumber
sudo apt install moreutils
Untuk mengurutkan file di tempat, coba:
Seperti yang dijelaskan dalam jawaban lain, Anda tidak dapat langsung mengarahkan kembali output ke file input. Tetapi Anda dapat mengevaluasi
sort
perintah pertama dan kemudian mengarahkannya kembali ke file asli. Dengan cara ini Anda bisa menerapkan pengurutan di tempat.Demikian pula, Anda juga dapat menerapkan trik ini ke perintah lain seperti
paste
untuk menerapkan penambahan baris-bijaksana.sumber
echo
dapat mengacaukan backslash lolos di POSIX, dan-o
tidak bekerja untuk file yang sama dengan input seperti yang dijelaskan di: stackoverflow.com/a/29244387/895245Inilah pendekatan yang (ab) gunakan
vim
:The
-c :sort -c :wq
memanggil porsi perintah untuk vim setelah file terbuka.-E
dan-s
diperlukan agar vim dijalankan dalam mode "headless" yang tidak menarik ke terminal.Ini hampir tidak ada manfaatnya daripada
sort -o "${filename}" "${filename}"
pendekatan kecuali bahwa hanya mengambil argumen nama file sekali.Ini berguna bagi saya untuk menerapkan
formatter
arahan dalamnanorc
entri untuk.gitignore
file. Inilah yang saya gunakan untuk itu:sumber
nanorc
? Oh ironi itu.Apakah Anda ingin mengurutkan semua file dalam folder dan subfolder menimpanya?
Gunakan ini:
sumber