temukan panjang garis terpanjang di semua file teks dalam direktori


16

Saya tahu cara mendapatkan panjang baris terpanjang dalam file teks awk

awk ' { if ( length > L ) { L=length} }END{ print L}' file.txt

tetapi bagaimana saya bisa mendapatkan panjang garis terpanjang dari semua file dalam direktori?

Jawaban:


11

Solusi paling mudah adalah menggabungkan semua file dan menyalurkan hasilnya ke skrip Anda:

cat ./* | awk '{ if ( length > L ) { L=length} }END{ print L}'

Anda juga dapat mengirimkan langsung beberapa file ke awk:

awk '{ if ( length > L ) { L=length} }END{ print L}' ./*

Tentu saja, ada beberapa peringatan jika file sebenarnya adalah direktori tetapi seharusnya tidak berbahaya. Anda mungkin memiliki masalah yang lebih besar dengan file biner karena mereka tidak memiliki konsep garis . Jadi, agar lebih spesifik, Anda dapat melakukan sesuatu seperti

 awk '{ if ( length > L ) { L=length} }END{ print L}' ./*.txt

hanya untuk mencocokkan .txtfile dalam direktori saat ini.

Dan, seperti yang dinyatakan oleh @ G-Man dalam komentarnya, *tidak akan cocok dengan file yang tersembunyi (dimulai dengan titik). Jika Anda menginginkannya, gunakan * .*.


Atau, bisa dibilang cat * .* | ...,. Atau hilangkan penggunaan kucing yang tidak berguna dan katakan awk '...' * .*.
G-Man Mengatakan 'Reinstate Monica'

@ G-Man Memang. Saya sedang mengedit jawaban saya tentang hal itu ketika Anda berkomentar. :-) Saya mengatakan yang paling mudah karena menyatukan file dengan kucing adalah yang tampak lebih sederhana pada awalnya.
lgeorget

4

Dengan GNU wc:

cat *.txt|wc -L

-L mencetak panjang garis terpanjang.


4

Jika Anda ingin panjang maksimal per file, dengan GNU awk:

find . -type f -exec awk -v l=0 '
   length>l {l=length} ENDFILE{print FILENAME ":", l; l=0}' {} +

Atau satu panjang maksimal di semua file:

find . -type f -size +1c -exec cat {} + |
  awk -v l=0 'length>l {l=length}; END{print l}'

Itu mengasumsikan file berakhir dalam karakter baris baru. Jika satu file tidak berakhir dengan karakter baris baru, maka baris non-dibatasi terakhirnya akan digabungkan dengan baris pertama dari file berikutnya dan mungkin membatalkan hasil Anda.

-size +1c adalah pengoptimalan karena file teks yang kosong atau hanya berisi satu karakter masing-masing memiliki 0 baris dan 1 baris kosong, sehingga tidak akan memiliki baris terpanjang.


Mereka adalah file teks, jadi mereka berakhir dengan karakter baris baru (kecuali kosong).
Gilles 'SANGAT berhenti menjadi jahat'

0

Juga dengan GNU wc (coreutils 8.4), ia dapat menangani banyak file

wc -L *.txt
  • daftar panjang setiap file individual
  • serta memberikan panjang terlama dari semua file

Ini pada dasarnya apa ini jawaban lain menyebutkan wc -Ltidak, tapi solusi Anda memiliki kelemahan yang Anda harus menyeberang melalui max-panjang semua file lain pertama. Apakah ada manfaatnya?
Anthon
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.