फ़ाइल नाम के बिना लाइनों की संख्या को प्रिंट करने के लिए "wc -l" कैसे प्राप्त करें?


155
wc -l file.txt

लाइनों और फ़ाइल नाम की आउटपुट संख्या।

मुझे केवल नंबर ही चाहिए (फ़ाइल नाम नहीं)।

मे यह कर सकती हु

 wc -l file.txt | awk '{print $1}'

लेकिन शायद एक बेहतर तरीका है?


13
wc -l < file.txtठीक और संक्षिप्त रूप से काम करता है।
जोनाथन लेफ़लर

2
संभावित नकल डुप्लिकेट से बस पूर्णांक wc से bash में
Ciro Santilli of just just just just 六四

3
यह एक ऐसा सवाल है जिसे मैंने अब दो बार देखा है। Wc का यह व्यवहार अचिन्त्य और एंटी-पैराडाइमेटिक फॉर-निक्स सामान्य मरोड़ है। यह मरोड़ एक कारण के लिए है, क्योंकि आप वास्तव में सभी प्रकार के शराबी अतिरेक के आसपास काम नहीं करना चाहते हैं। आखिरकार, मैं फ़ाइल का नाम जानता हूं , क्या मैं नहीं? मैं जो चाहता हूं वह लाइन काउंट है।
पीटर -

जवाबों:


217

इस तरह आजमाएं:

wc -l < file.txt

5
AIX, ksh में, यह हमेशा संख्या से आगे बढ़ने वाला स्थान होगा। हमें उपयोग करना होगा | जागो '{प्रिंट $ 1}' या एक कट, रिक्त स्थान को ट्रिम करने के लिए। ट्रिम करने के लिए एक और तरीका एक गूंज के साथ संलग्न करना होगा।
राओ

@rao सही है, यह संख्या से पहले एक स्थान जोड़ देगा। मेरा समाधान इसे हल करता है और जाग या कट की तुलना में सरल है।
देसी कोचरन

@rao बैश के साथ कोई जगह नहीं है। अंतरिक्ष ksh में कहां से आता है? wc -lएक का उत्सर्जन नहीं करना चाहिए, और क्यों एक अंतरिक्ष के साथ एक कार्यक्रम के मानक उत्पादन को रोकना होगा?
पीटर -

जबकि यह सही वर्कअराउंड है (और यह काफी आसान है कि wc को कभी भी संशोधित नहीं किया गया है), यह संभावना धीमी और अनपेक्षित है। एक के लिए, मैं 4711 [stdin]आउटपुट के रूप में कुछ की उम्मीद है ।
पीटर - मोनिका

इसके साथ युग्मन पर भी विचार करें printf "%'d", जो अंतरिक्ष की देखभाल करता है और बड़ी संख्या में अच्छी तरह से प्रिंट करता है।
सिंह

21
cat file.txt | wc -l

मैन पेज के अनुसार (बीएसडी संस्करण के लिए, मेरे पास जांच करने के लिए जीएनयू संस्करण नहीं है):

यदि कोई फ़ाइल निर्दिष्ट नहीं है, तो मानक इनपुट का उपयोग किया जाता है और कोई फ़ाइल नाम प्रदर्शित नहीं किया जाता है। अधिकांश वातावरण में EOF या [^ D] प्राप्त होने तक संकेत इनपुट स्वीकार करेगा।


3
मुझे बिल्ली पसंद नहीं है - संघटन में बहुत समय लगता है।
पोइगाबास

9
wc -l < file.txtएक ही प्रभाव है।
pjmorse

@user: इसका परीक्षण करें। अब तक सबसे धीमा हिस्सा फाइल ऑफ डिस्क को पढ़ रहा होगा।
1944 में sarnold

11
@ user1286528 फिर wc -l < file.txtबिल्ली के बेकार उपयोग से बचने के लिए उपयोग करें। यद्यपि आप बिलकुल पागल हैं अगर आपको लगता है कि यह किसी भी ध्यान देने योग्य समय का उपभोग कर रहा है।
हॉब्स

12

अग्रणी स्थान के बिना ऐसा करने के लिए, क्यों नहीं:

wc -l < file.txt | bc

मुझे इसके साथ सिंटैक्स त्रुटियां मिलती हैं (Ubuntu 14.04)। मुझे लगता है कि फ़ाइल नाम के साथ कोई समस्या है।
MERose

RHEL 6.7 पर यह त्रुटियां पैदा करता है: $ wc -l file.csv | bc (standard_in) 1: सिंटैक्स त्रुटि (standard_in) 1: अवैध चरित्र: N (standard_in) 1: सिंटैक्स त्रुटि (standard_in) 1: सिंटैक्स त्रुटि
रोड्रिगो हर्टोर्ट

3
मुझे एक पार्स त्रुटि भी मिलती है, लेकिन आप इसे wc -l < file.txtपार्स त्रुटि को ठीक करने और स्थान को हटाने के लिए उपयोग करने के लिए अन्य उत्तर के साथ जोड़ सकते हैं :wc -l < file.txt | bc
jangosteve

11

कैसा रहेगा

wc -l file.txt | cut -d' ' -f1

यानी पाइप के उत्पादन wcमें cut(जहां सीमांकक रिक्त स्थान हैं और सिर्फ पहला क्षेत्र चुन सकते हैं)


4
यह wc -l file.txt | awk '{print $1}'ओपी की कोशिश की तुलना में कोई बेहतर नहीं है ।
डबलडाउन

1
wc -l < file.txtविधि से भी तेज । लेकिन | cut -d' ' -f2बीएसडी पर उपयोग करना चाहिए , जब तक कि wcकमांड एक अग्रणी स्थान देता है, उदाहरण: "34068289 file.txt", "34068289 file.txt" के बजाय।
सोलोपाजो डी एरियेरेज़

@ डबलडाउन अच्छी तरह से, जाग का उपयोग करना एक आरा के बजाय एक बोर्ड को काटने के लिए सीएनसी मशीन का उपयोग करने जैसा है। देखा के लिए एक आरा का उपयोग करें।
पीटर - मोनिका

5

तकनीक की तुलना

मेरे पास इसी तरह का मुद्दा था wcजिसके द्वारा प्रदान किए गए अग्रणी व्हाट्सएप के बिना एक चरित्र गणना प्राप्त करने का प्रयास किया गया , जिसने मुझे इस पृष्ठ पर ले गया। यहां उत्तरों की कोशिश करने के बाद, मैक (बीएसडी बैश) पर मेरे व्यक्तिगत परीक्षण के परिणाम निम्नलिखित हैं। फिर, यह चरित्र गणना के लिए है; लाइन काउंट के लिए आप क्या करेंगे wc -lecho -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`एक और साफ चाल के साथ)।


1
echo $(printf '%s' "$FOO" | wc -c)एक दुर्लभ अवसर है जब echoएक कमांड उपनिवेश के साथ बेकार नहीं है।
त्रिकोणीय

@tripleee वाह ... आपके कोड के आधार पर, echo `echo $FOO`;एक चर पर String.trim () कमांड की तरह भी कार्य करता है! यह आश्चर्यजनक रूप से आसान है। मैं आपके जवाब के लिए आपकी लाइन भी जोड़ दूंगा।
बीजर

शायद संदर्भ के लिए यह भी देखें कि कब एक शेल चर के आसपास कोट को लपेटना है
त्रिकोणीय


4

कैसा रहेगा

grep -ch "^" file.txt

3
अच्छा लगा। बहुत ही मौलिक / रचनात्मक प्रयोग, grepलेकिन इसकी जाँच करना wcमेरे परीक्षणों में सरल / सीधी विधि की तुलना में 2x से (6 गुणा) धीमा होता है ।
अरीफ्ल

3

जाहिर है, इसके बहुत सारे समाधान हैं। हालांकि यहाँ एक और है:

wc -l somefile | tr -d "[:alpha:][:blank:][:punct:]"

यह केवल लाइनों की संख्या को आउटपुट करता है, लेकिन अनुगामी न्यूलाइन वर्ण ( \n) मौजूद है, यदि आप ऐसा नहीं चाहते हैं, तो इसके [:blank:]साथ बदलें [:space:]


यह समस्या है जब फ़ाइल नाम में एक संख्या है। उदाहरण के लिए test9इसमें 1 लाइन वाली फाइल के लिए , आउटपुट 19 होगा।
राफेल एहरेंस

1

सबसे अच्छा तरीका यह होगा कि सबसे पहले सभी फाइलों को निर्देशिका में खोजें, फिर AWK NR (रिकॉर्ड्स वेरिएबल की संख्या) का उपयोग करें

नीचे आदेश है:

find <directory path>  -type f | awk  'END{print NR}'

उदाहरण : - find /tmp/ -type f | awk 'END{print NR}'


0

यह मेरे लिए सामान्य का उपयोग करके wc -lऔर sedकिसी भी चार्ट को छीनने के लिए काम करता है जो एक संख्या नहीं है।

wc -l big_file.log | sed -E "s/([a-z\-\_\.]|[[:space:]]*)//g"

# 9249133
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.