Saya mencari cara sederhana untuk menemukan panjang baris terpanjang dalam sebuah file. Idealnya, ini akan menjadi perintah bash shell sederhana, bukan skrip.
198
Menggunakan wc (GNU coreutils) 7.4:
wc -L filename
memberi:
101 filename
-c -l -m -w
opsi yang POSIX.-L
adalah GNUism.-L
tergantung pada lokal. Beberapa karakter (baik dalam byte dan dalam arti multibyte) bahkan mungkin tidak dihitung sama sekali!wc: illegal option -- L usage: wc [-clmw] [file ...]
gwc
ada dalamcoreutils
rumus, yang menginstal semua coreutils GNU dengang
awalan.Untuk referensi: Menemukan baris terpanjang dalam file
sumber
END{}
blok.sumber
awk '{ if (length($0) > max) max = length($0) } END { print max }' YOURFILE
awk 'length>max{max=length}END{print max}' file
awk '{ if (length($0) > max) {max = length($0); maxline = $0} } END { print maxline }' YOURFILE | wc -c
Hanya untuk bersenang-senang dan tujuan pendidikan, solusi shell POSIX murni , tanpa penggunaan kucing yang tidak berguna dan tidak ada forking untuk perintah eksternal. Mengambil nama file sebagai argumen pertama:
sumber
< "$1"
itu dapat dengan mudah membaca dari stdin. Dengan tes untuk$#
itu bahkan bisa melakukan keduanya, tergantung pada jumlah args. Tidak perlu bagi kucing yang tidak berguna di dunia ini. Pemula harus diajari sesuai sejak awal.longest < /usr/share/dict/words
memberi
sumber
wc
keluaran nama file :)Mencetak panjang, nomor baris, dan isi dari garis terpanjang
Mencetak daftar semua garis yang diurutkan, dengan nomor dan panjang garis
.
adalah operator gabungan - digunakan di sini setelah panjang ()$.
adalah nomor baris saat ini$_
adalah baris saat inisumber
wc -L
adalah solusi terbaik yang saya lihat sejauh ini.wc -L
mengambil 3 detikwc -L
hitung saja catatan jumlah - Q ini akan menemukan garis terpanjang - tidak persis sama, jadi ini bukan perbandingan yang akurat.Poin penting yang diabaikan dalam contoh di atas.
2 contoh berikut menghitung tab yang diperluas
Berikut adalah 2 tab yang tidak diperluas.
begitu
sumber
Terlihat semua jawabannya jangan berikan nomor baris dari baris terpanjang. Perintah berikut dapat memberikan nomor baris dan panjang kira-kira:
sumber
awk '{print length}' test.txt | sort -rn | head -1
. Jika Anda memerlukan konten baris yang sebenarnya juga, makaawk '{print length,$0}' test.txt | sort -k1 -rn| head -1
Dalam perl:
ini hanya mencetak garis, bukan panjangnya juga.
sumber
Berikut adalah referensi dari anwser
http://wtanaka.com/node/7719
sumber
Hanya untuk bersenang-senang, inilah versi Powershell:
Dan untuk mendapatkan panjangnya:
sumber
sort
mengambil filename.txt sebagai argumen? Maka kucing tidak berguna karenasort length filename.txt | select -last 1
menghindari pipa dan proses yang hanya menyalin data sekitar.Saya berada di lingkungan Unix, dan bekerja dengan file yang di-gzip dengan ukuran beberapa GB. Saya menguji perintah berikut menggunakan file gzip 2 GB dengan panjang catatan 2052.
zcat <gzipped file> | wc -L
dan
zcat <gzipped file> | awk '{print length}' | sort -u
Waktu berada di rata
117 detik
109 detik
Ini skrip saya setelah sekitar 10 kali.
sumber
awk
manfaat versi dari caching blok disk dariwc
versi yang berjalan pertama (dan biji cache disk). Anda harus mengacak urutan siapa yang dipanggil pertama kali dari sepuluh kali agar argumen ini tetap berlaku.Variasi pada tema.
Yang ini akan menampilkan semua baris yang memiliki panjang garis terpanjang yang ditemukan dalam file, mempertahankan urutan mereka muncul di sumber.
Jadi file saya
akan memberi
sumber
Jika Anda menggunakan MacOS dan mendapatkan kesalahan ini:
wc: illegal option -- L
Anda tidak perlu menginstal GNU, lakukan ini.Jika yang Anda ingin lakukan hanyalah mendapatkan jumlah karakter di baris terpanjang file dan Anda menggunakan OS X run:
awk '{print length}' "$file_name" | sort -rn | head -1
Sesuatu seperti ini;
echo "The longest line in the file $file_name has $(awk '{print length}' "$file_name" | sort -rn | head -1) characters"
Output:
The longest line in the file my_file has 117 characters
sumber