एक निर्देशिका में सभी पाठ फ़ाइलों में सबसे लंबी लाइन की लंबाई पाते हैं


16

मुझे पता है कि कैसे एक पाठ फ़ाइल में सबसे लंबी लाइन की लंबाई प्राप्त करने के लिए awk

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

लेकिन मैं एक निर्देशिका में सभी फ़ाइलों की सबसे लंबी पंक्ति की लंबाई कैसे प्राप्त कर सकता हूं?

जवाबों:


11

सबसे सरल उपाय सभी फाइलों को सम्‍मिलित करना और परिणाम को आपकी पटकथा पर लाना है:

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वर्तमान निर्देशिका में केवल फ़ाइलों का मिलान करने के लिए ।

और, जैसा कि @ जी-मैन ने अपनी टिप्पणी में कहा है, *छिपी हुई फाइलों (डॉट के साथ शुरू) से मेल नहीं खाएगा। यदि आप उन चाहते हैं, का उपयोग करें * .*


या, यकीनन, cat * .* | ...। या बिल्ली के बेकार उपयोग को खत्म करें और कहें awk '...' * .*
जी-मैन का कहना है कि

@ जी-मैन दरअसल। जब आप टिप्पणी करते हैं तो मैं इस बारे में अपना उत्तर संपादित कर रहा था। :-) मैंने सबसे सरल इसलिए कहा क्योंकि फाइलों को बिल्ली के साथ मिलाना पहली बार में सरल लग रहा था।
लॉजेटर

4

GNU के साथ wc:

cat *.txt|wc -L

-L सबसे लंबी लाइन की लंबाई को प्रिंट करता है।


4

यदि आप प्रति फ़ाइल अधिकतम लंबाई चाहते हैं, तो 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 खाली पंक्ति है, इसलिए सबसे लंबी रेखा नहीं होगी।


वे पाठ फ़ाइलें हैं, इसलिए वे newline वर्णों में समाप्त होते हैं (जब तक कि खाली न हो)।
गिल्स एसओ- बुराई को रोकना '

0

इसके अलावा जीएनयू wc (coreutils 8.4) के साथ, यह कई फाइलों को संभाल सकता है

wc -L *.txt
  • प्रत्येक व्यक्तिगत फ़ाइल की लंबाई सूचीबद्ध करता है
  • साथ ही सभी फ़ाइलों की सबसे लंबी लंबाई प्रदान करते हैं

यह अनिवार्य रूप से इस अन्य उत्तर का उल्लेख wc -Lकरता है, लेकिन आपके समाधान का नुकसान यह है कि आपको पहले सभी अन्य फ़ाइलों की अधिकतम लंबाई के माध्यम से उतारा करना होगा। क्या इसमें कोई फायदा है?
एंथन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.