ফাইল নাম ছাড়াই কেবল লাইনের সংখ্যা প্রিন্ট করতে কীভাবে "wc -l" পাবেন?


155
wc -l file.txt

লাইন সংখ্যা এবং ফাইলের নাম আউটপুট।

আমার কেবল সংখ্যাটি প্রয়োজন (ফাইলের নাম নয়)।

আমি এটা করতে পারবো

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

তবে এর চেয়ে ভাল উপায় আর কি আছে?


13
wc -l < file.txtকাজটি সুনির্দিষ্টভাবে এবং সংক্ষিপ্তভাবে করে।
জোনাথন লেফলার


3
এই প্রশ্নটি আমি এখন দু'বার দেখেছি। ডাব্লু ভিসির এই আচরণটি অনিকল্পিত এবং অ্যানিক-প্যারাডিজমেটিক -নিক্স স্বাভাবিকের মতো স্বল্পতার জন্য d সেই স্বাচ্ছন্দ্য একটি কারণ রয়েছে কারণ আপনি ঠিক সব ধরণের বাড়াবাড়ি অপ্রয়োজনীয় কাজ করতে চান না । সর্বোপরি, আমি ফাইলের নাম জানি , আমি না ? আমি যা চাই তা হ'ল লাইন গণনা।
পিটার - মনিকা

উত্তর:


217

এইভাবে চেষ্টা করুন:

wc -l < file.txt

5
এআইএক্স, কেএসএস-এ, সর্বদা সংখ্যার আগে একটি স্থান থাকবে। আমাদের ব্যবহার করতে হবে | ফাঁকা জায়গা ছাঁটাই করতে awk '{মুদ্রণ $ 1}' বা একটি কাটা। ছাঁটাই করার আর একটি উপায় হ'ল প্রতিধ্বনির সাহায্যে বন্ধ করা।
রাও

@ রাও সঠিক, এটি সংখ্যার আগে একটি স্থান যুক্ত করবে। আমার সমাধান এটিকে সমাধান করে এবং বেজা বা কাটা থেকে সহজ।
দেশি কোচরন

@ রাও বাশ নিয়ে জায়গা নেই। স্থানটি কোথা থেকে আসে? wc -lএকটিকে নির্গত করা উচিত নয় এবং কেন ksh কোনও স্থানের সাথে কোনও প্রোগ্রামের স্ট্যান্ডার্ড আউটপুটটিকে প্রিপেন্ড করবে?
পিটার - মনিকা পুনরায়

যদিও এটি সঠিক কর্মক্ষম (এবং এটি যথেষ্ট সহজ যে ডাব্লুসিটি কখনই সংশোধন করেনি), সম্ভবত এটি ধীর এবং স্বল্পতর। একটির জন্য, আমি 4711 [stdin]আউটপুট হিসাবে কিছু আশা করব ।
পিটার - মনিকা

এর সাথে জুটি গড়ার বিষয়টিও বিবেচনা করুন printf "%'d", যা জায়গার যত্ন নেয় এবং প্রচুর সংখ্যক সুন্দরভাবে মুদ্রণ করে।
লিও

21
cat file.txt | wc -l

ম্যান পেজ অনুসারে (বিএসডি সংস্করণের জন্য, আমার কাছে চেক করার জন্য জিএনইউ সংস্করণ নেই):

যদি কোনও ফাইল নির্দিষ্ট না করা থাকে তবে স্ট্যান্ডার্ড ইনপুট ব্যবহৃত হয় এবং কোনও ফাইলের নাম প্রদর্শিত হয় না। প্রম্পটটি ইওএফ না পাওয়া পর্যন্ত ইনপুট গ্রহণ করবে, বা বেশিরভাগ পরিবেশে [^ D]।


3
আমি বিড়াল পছন্দ করি না - সংমিশ্রণ অনেক সময় ব্যয় করে।
PoGibas

9
wc -l < file.txtএকই প্রভাব আছে।
pjmorse

@ ব্যবহারকারী: এটি পরীক্ষা করে দেখুন। এখন পর্যন্ত সবচেয়ে ধীরতম অংশটি ফাইলটি অফ ডিস্ক পড়বে।
19:44 এ 23

11
@ ব্যবহারকারী 1286528 তারপরে wc -l < file.txtবিড়ালের অকেজো ব্যবহার এড়াতে ব্যবহার করুন। যদিও আপনি মনে করেন যে এটি কোনও লক্ষণীয় সময় ব্যয় করছে absolutely
hobbs

12

নেতৃস্থানীয় স্থান ব্যতীত এটি করার জন্য, কেন নয়:

wc -l < file.txt | bc

আমি এর সাথে সিনট্যাক্স ত্রুটি পেয়েছি (উবুন্টু 14.04)। আমি মনে করি ফাইলের নাম নিয়ে কোনও সমস্যা আছে।
মেরোস

একটি RHEL 6.7 এ এটি ত্রুটি উত্থাপন করে: c wc -l file.csv | বিসি (স্ট্যান্ডার্ড_ইন) 1: সিনট্যাক্স ত্রুটি (স্ট্যান্ডার্ড_ইন) 1: অবৈধ চরিত্র: এন (স্ট্যান্ডার্ড_ইন) 1: সিনট্যাক্স ত্রুটি (স্ট্যান্ডার্ড_ইন) 1: সিনট্যাক্স ত্রুটি
রডরিগো হজোর্ট

3
আমি একটি পার্স wc -l < file.txtwc -l < file.txt | bc
ত্রুটিও পেয়েছি,

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' ' -f2BSD- এ অবশ্যই ব্যবহার করা উচিত , যতক্ষণ না wcকমান্ডটি একটি অগ্রণী স্থান দেয়, উদাহরণস্বরূপ: "34068289 file.txt", "34068289 file.txt" এর পরিবর্তে।
সোপালাজো ডি অ্যারিরিজ

@ ডাবলডাউন ভাল, জোর করে ব্যবহার করাকে করাতের পরিবর্তে বোর্ড কেটে সিএনসি মেশিন ব্যবহার করার মতো। করাত জন্য একটি করাত ব্যবহার করুন।
পিটার - মনিকা পুনরায় ইনস্টল করুন

5

কৌশল তুলনা

আমার প্রদত্ত নেতৃস্থানীয় হোয়াইটস্পেস ছাড়াই একটি চরিত্রের গণনা পাওয়ার চেষ্টা করার সাথে আমার একই রকম সমস্যা হয়েছিল wc, যা আমাকে এই পৃষ্ঠায় নিয়ে গেছে। এখানে উত্তরগুলি চেষ্টা করার পরে, ম্যাকের উপর আমার ব্যক্তিগত পরীক্ষার (বিএসডি বাশ) ফলাফলগুলি নিম্নলিখিত are আবার এটি চরিত্র গণনার জন্য; লাইন গণনার জন্য আপনি করতেন 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কমান্ড সাবশিশন দিয়ে অকেজো হয় না।
ট্রিপলি

@ ট্রাইপলি হুয়া ... আপনার কোডের ভিত্তিতে, echo `echo $FOO`;একটি ভেরিয়েবলের উপর স্ট্রিং.ট্রিম () কমান্ডের মতোও কাজ করে! এটা আশ্চর্যজনকভাবে সহজ। আমি আমার উত্তরে আপনার লাইন যুক্ত করব।
বিজেজর



4

কেমন

grep -ch "^" file.txt

3
খুশী হলাম। খুব আসল / সৃজনশীল ব্যবহার grepকিন্তু এটি যাচাইয়ের ফলে wcআমার পরীক্ষাগুলিতে সহজ / সরল পদ্ধতি থেকে 2x থেকে 6x ধীর হয়ে উঠবে (আশ্চর্যজনকভাবে) ।
আরিফেল

3

স্পষ্টতই, এর অনেকগুলি সমাধান রয়েছে। এখানে অন্য একটি যদিও:

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

এটি কেবল রেখার সংখ্যার আউটপুট দেয়, তবে অনুবর্তী নতুন লাইনের অক্ষর ( \n) উপস্থিত থাকে, আপনি যদি এটি না চান তবে এর [:blank:]সাথে প্রতিস্থাপন করুন [:space:]


ফাইলের নামটিতে এটির একটি নম্বর থাকাতে এটি সমস্যা রয়েছে। ফাইলের জন্য উদাহরণস্বরূপ test9এতে 1 টি লাইন সঙ্গে, আউটপুট 19 হতে হবে
রাফায়েল Ahrens

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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.