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?
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 .txt
file 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 * .*
.
cat * .* | ...
,. Atau hilangkan penggunaan kucing yang tidak berguna dan katakanawk '...' * .*
.Dengan GNU
wc
:-L
mencetak panjang garis terpanjang.sumber
Jika Anda ingin panjang maksimal per file, dengan GNU awk:
Atau satu panjang maksimal di semua file:
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.sumber
Juga dengan GNU wc (coreutils 8.4), ia dapat menangani banyak file
sumber
wc -L
tidak, tapi solusi Anda memiliki kelemahan yang Anda harus menyeberang melalui max-panjang semua file lain pertama. Apakah ada manfaatnya?