wc -l file.txt
लाइनों और फ़ाइल नाम की आउटपुट संख्या।
मुझे केवल नंबर ही चाहिए (फ़ाइल नाम नहीं)।
मे यह कर सकती हु
wc -l file.txt | awk '{print $1}'
लेकिन शायद एक बेहतर तरीका है?
wc -l file.txt
लाइनों और फ़ाइल नाम की आउटपुट संख्या।
मुझे केवल नंबर ही चाहिए (फ़ाइल नाम नहीं)।
मे यह कर सकती हु
wc -l file.txt | awk '{print $1}'
लेकिन शायद एक बेहतर तरीका है?
जवाबों:
इस तरह आजमाएं:
wc -l < file.txt
wc -l
एक का उत्सर्जन नहीं करना चाहिए, और क्यों एक अंतरिक्ष के साथ एक कार्यक्रम के मानक उत्पादन को रोकना होगा?
4711 [stdin]
आउटपुट के रूप में कुछ की उम्मीद है ।
printf "%'d"
, जो अंतरिक्ष की देखभाल करता है और बड़ी संख्या में अच्छी तरह से प्रिंट करता है।
cat file.txt | wc -l
मैन पेज के अनुसार (बीएसडी संस्करण के लिए, मेरे पास जांच करने के लिए जीएनयू संस्करण नहीं है):
यदि कोई फ़ाइल निर्दिष्ट नहीं है, तो मानक इनपुट का उपयोग किया जाता है और कोई फ़ाइल नाम प्रदर्शित नहीं किया जाता है। अधिकांश वातावरण में EOF या [^ D] प्राप्त होने तक संकेत इनपुट स्वीकार करेगा।
wc -l < file.txt
एक ही प्रभाव है।
wc -l < file.txt
बिल्ली के बेकार उपयोग से बचने के लिए उपयोग करें। यद्यपि आप बिलकुल पागल हैं अगर आपको लगता है कि यह किसी भी ध्यान देने योग्य समय का उपभोग कर रहा है।
अग्रणी स्थान के बिना ऐसा करने के लिए, क्यों नहीं:
wc -l < file.txt | bc
wc -l < file.txt
पार्स त्रुटि को ठीक करने और स्थान को हटाने के लिए उपयोग करने के लिए अन्य उत्तर के साथ जोड़ सकते हैं :wc -l < file.txt | bc
कैसा रहेगा
wc -l file.txt | cut -d' ' -f1
यानी पाइप के उत्पादन wc
में cut
(जहां सीमांकक रिक्त स्थान हैं और सिर्फ पहला क्षेत्र चुन सकते हैं)
wc -l file.txt | awk '{print $1}'
ओपी की कोशिश की तुलना में कोई बेहतर नहीं है ।
wc -l < file.txt
विधि से भी तेज । लेकिन | cut -d' ' -f2
बीएसडी पर उपयोग करना चाहिए , जब तक कि wc
कमांड एक अग्रणी स्थान देता है, उदाहरण: "34068289 file.txt", "34068289 file.txt" के बजाय।
मेरे पास इसी तरह का मुद्दा था wc
जिसके द्वारा प्रदान किए गए अग्रणी व्हाट्सएप के बिना एक चरित्र गणना प्राप्त करने का प्रयास किया गया , जिसने मुझे इस पृष्ठ पर ले गया। यहां उत्तरों की कोशिश करने के बाद, मैक (बीएसडी बैश) पर मेरे व्यक्तिगत परीक्षण के परिणाम निम्नलिखित हैं। फिर, यह चरित्र गणना के लिए है; लाइन काउंट के लिए आप क्या करेंगे wc -l
। echo -n
पीछे चल रही लाइन को तोड़ता है।
FOO="bar"
echo -n "$FOO" | wc -c # " 3" (x)
echo -n "$FOO" | wc -c | bc # "3" (√)
echo -n "$FOO" | wc -c | tr -d ' ' # "3" (√)
echo -n "$FOO" | wc -c | awk '{print $1}' # "3" (√)
echo -n "$FOO" | wc -c | cut -d ' ' -f1 # "" for -f < 8 (x)
echo -n "$FOO" | wc -c | cut -d ' ' -f8 # "3" (√)
echo -n "$FOO" | wc -c | perl -pe 's/^\s+//' # "3" (√)
echo -n "$FOO" | wc -c | grep -ch '^' # "1" (x)
echo $( printf '%s' "$FOO" | wc -c ) # "3" (√)
मैं cut -f*
सामान्य तौर पर इस पद्धति पर भरोसा नहीं करूंगा क्योंकि इसके लिए आवश्यक है कि आप उन प्रमुख स्थानों की सही संख्या जानें जो किसी भी दिए गए आउटपुट में हो सकते हैं। और grep
एक गिनती लाइनों के लिए काम करता है, लेकिन वर्ण नहीं।
bc
सबसे संक्षिप्त है, और awk
और perl
एक सा overkill लगते हैं, लेकिन वे सब अपेक्षाकृत तेज और पोर्टेबल पर्याप्त होना चाहिए।
यह भी ध्यान दें कि इनमें से कुछ को सामान्य तारों से आसपास के व्हाट्सएप ट्रिम करने के लिए अनुकूलित किया जा सकता है, साथ ही ( echo `echo $FOO`
एक और साफ चाल के साथ)।
echo $(printf '%s' "$FOO" | wc -c)
एक दुर्लभ अवसर है जब echo
एक कमांड उपनिवेश के साथ बेकार नहीं है।
echo `echo $FOO`;
एक चर पर String.trim () कमांड की तरह भी कार्य करता है! यह आश्चर्यजनक रूप से आसान है। मैं आपके जवाब के लिए आपकी लाइन भी जोड़ दूंगा।
printf
बेहतर है echo
?
जाहिर है, इसके बहुत सारे समाधान हैं। हालांकि यहाँ एक और है:
wc -l somefile | tr -d "[:alpha:][:blank:][:punct:]"
यह केवल लाइनों की संख्या को आउटपुट करता है, लेकिन अनुगामी न्यूलाइन वर्ण ( \n
) मौजूद है, यदि आप ऐसा नहीं चाहते हैं, तो इसके [:blank:]
साथ बदलें [:space:]
।
test9
इसमें 1 लाइन वाली फाइल के लिए , आउटपुट 19 होगा।
सबसे अच्छा तरीका यह होगा कि सबसे पहले सभी फाइलों को निर्देशिका में खोजें, फिर AWK NR (रिकॉर्ड्स वेरिएबल की संख्या) का उपयोग करें
नीचे आदेश है:
find <directory path> -type f | awk 'END{print NR}'
उदाहरण : - find /tmp/ -type f | awk 'END{print NR}'
wc -l < file.txt
ठीक और संक्षिप्त रूप से काम करता है।