जवाबों:
सबसे सरल उपाय सभी फाइलों को सम्मिलित करना और परिणाम को आपकी पटकथा पर लाना है:
cat ./* | awk '{ if ( length > L ) { L=length} }END{ print L}'
तुम भी सीधे कई फाइलें पास करने के लिए जा सकते हैं:
awk '{ if ( length > L ) { L=length} }END{ print L}' ./*
बेशक, कुछ चेतावनी हो सकती है यदि फाइलें वास्तव में निर्देशिका में हैं, लेकिन यह हानिरहित होनी चाहिए। आपको बाइनरी फ़ाइलों के साथ बड़ी समस्याएं हो सकती हैं क्योंकि उनके पास लाइन की अवधारणा नहीं है । तो, अधिक विशिष्ट होने के लिए, आप कुछ ऐसा कर सकते हैं
awk '{ if ( length > L ) { L=length} }END{ print L}' ./*.txt
.txt
वर्तमान निर्देशिका में केवल फ़ाइलों का मिलान करने के लिए ।
और, जैसा कि @ जी-मैन ने अपनी टिप्पणी में कहा है, *
छिपी हुई फाइलों (डॉट के साथ शुरू) से मेल नहीं खाएगा। यदि आप उन चाहते हैं, का उपयोग करें * .*
।
यदि आप प्रति फ़ाइल अधिकतम लंबाई चाहते हैं, तो GNU awk के साथ:
find . -type f -exec awk -v l=0 '
length>l {l=length} ENDFILE{print FILENAME ":", l; l=0}' {} +
या सभी फाइलों में एक अधिकतम लंबाई:
find . -type f -size +1c -exec cat {} + |
awk -v l=0 'length>l {l=length}; END{print l}'
यह मानता है कि फाइल नए अक्षरों में समाप्त होती है। यदि कोई फ़ाइल किसी नई पंक्ति वर्ण में समाप्त नहीं होती है, तो उसकी अंतिम गैर-सीमांकित रेखा अगली फ़ाइल की पहली पंक्ति के साथ विलय कर दी जाएगी और संभवतः आपका परिणाम शून्य कर देगी।
-size +1c
पाठ फ़ाइलों के रूप में एक अनुकूलन है जो खाली हैं या केवल एक वर्ण में क्रमशः 0 पंक्ति और 1 खाली पंक्ति है, इसलिए सबसे लंबी रेखा नहीं होगी।
इसके अलावा जीएनयू wc (coreutils 8.4) के साथ, यह कई फाइलों को संभाल सकता है
wc -L *.txt
wc -L
करता है, लेकिन आपके समाधान का नुकसान यह है कि आपको पहले सभी अन्य फ़ाइलों की अधिकतम लंबाई के माध्यम से उतारा करना होगा। क्या इसमें कोई फायदा है?
cat * .* | ...
। या बिल्ली के बेकार उपयोग को खत्म करें और कहेंawk '...' * .*
।