bir dizindeki tüm metin dosyalarındaki en uzun satırın uzunluğunu bulma


16

Bir metin dosyasındaki en uzun satırın uzunluğunu nasıl elde edebileceğimi biliyorum awk

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

ancak bir dizindeki tüm dosyaların en uzun satırının uzunluğunu nasıl alabilirim?

Yanıtlar:


11

En basit çözüm tüm dosyaları birleştirmek ve sonucu betiğinize bağlamaktır:

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

Ayrıca awk için doğrudan birkaç dosya iletebilirsiniz:

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

Tabii ki, dosyalar aslında dizinler ise bazı uyarılar olabilir, ancak zararsız olmalıdır. İkili dosyalar ile daha büyük sorunlarınız olabilir, çünkü bir satır kavramı yoktur . Yani, daha spesifik olmak için,

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

yalnızca .txtgeçerli dizindeki dosyaları eşleştirmek için .

@ G-Man'nin yorumunda belirttiği gibi, *gizli dosyalarla (nokta ile başlayan) eşleşmeyecek. Bunları istiyorsanız, kullanın * .*.


Veya tartışmasız cat * .* | .... Ya da kedinin gereksiz kullanımını ortadan kaldırın ve söyleyin awk '...' * .*.
G-Man 'Monica'yı Yeniden Başlat' diyor

@ G-Man Gerçekten. Yorum yaparken bu konudaki cevabımı düzenliyordum. :-) En basit şekilde söyledim çünkü dosyaları kedi ile birleştirmek ilk başta daha basit görünen şeydi.
lgeorget

4

GNU ile wc:

cat *.txt|wc -L

-L en uzun çizginin uzunluğunu yazdırır.


4

GNU awk ile dosya başına maksimum uzunluk istiyorsanız:

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

Veya tüm dosyalarda bir maksimum uzunluk:

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

Bu, dosyaların satırsonu karakterleriyle biteceğini varsayar. Bir dosya yeni satır karakteriyle bitmezse, son sınırlanmamış satırı sonraki dosyanın ilk satırıyla birleştirilir ve muhtemelen sonucunuzu geçersiz kılar.

-size +1c boş veya yalnızca bir karakter içeren metin dosyaları sırasıyla 0 satır ve 1 boş satır içerdiğinden, en uzun satıra sahip olmayacağı için bir optimizasyondur.


Bunlar metin dosyalarıdır, bu nedenle yeni satır karakterleriyle biter (boş değilse).
Gilles 'SO- kötü olmayı kes

0

Ayrıca GNU wc (coreutils 8.4) ile birden fazla dosyayı işleyebilir

wc -L *.txt
  • her bir dosyanın uzunluğunu listeler
  • tüm dosyaların en uzun uzunluğunu sağlamanın yanı sıra

Bu, diğer yanıtın bahsettiği şeydir wc -L, ancak çözümünüzün önce tüm diğer dosyaların maksimum uzunluğunda beklemek zorunda olduğu dezavantajı vardır. Bunda bir avantaj var mı?
Anthon
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.