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ठीक और संक्षिप्त रूप से काम करता है।