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
একটিকে নির্গত করা উচিত নয় এবং কেন ksh কোনও স্থানের সাথে কোনও প্রোগ্রামের স্ট্যান্ডার্ড আউটপুটটিকে প্রিপেন্ড করবে?
4711 [stdin]
আউটপুট হিসাবে কিছু আশা করব ।
printf "%'d"
, যা জায়গার যত্ন নেয় এবং প্রচুর সংখ্যক সুন্দরভাবে মুদ্রণ করে।
cat file.txt | wc -l
ম্যান পেজ অনুসারে (বিএসডি সংস্করণের জন্য, আমার কাছে চেক করার জন্য জিএনইউ সংস্করণ নেই):
যদি কোনও ফাইল নির্দিষ্ট না করা থাকে তবে স্ট্যান্ডার্ড ইনপুট ব্যবহৃত হয় এবং কোনও ফাইলের নাম প্রদর্শিত হয় না। প্রম্পটটি ইওএফ না পাওয়া পর্যন্ত ইনপুট গ্রহণ করবে, বা বেশিরভাগ পরিবেশে [^ D]।
wc -l < file.txt
একই প্রভাব আছে।
wc -l < file.txt
বিড়ালের অকেজো ব্যবহার এড়াতে ব্যবহার করুন। যদিও আপনি মনে করেন যে এটি কোনও লক্ষণীয় সময় ব্যয় করছে absolutely
নেতৃস্থানীয় স্থান ব্যতীত এটি করার জন্য, কেন নয়:
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
BSD- এ অবশ্যই ব্যবহার করা উচিত , যতক্ষণ না wc
কমান্ডটি একটি অগ্রণী স্থান দেয়, উদাহরণস্বরূপ: "34068289 file.txt", "34068289 file.txt" এর পরিবর্তে।
আমার প্রদত্ত নেতৃস্থানীয় হোয়াইটস্পেস ছাড়াই একটি চরিত্রের গণনা পাওয়ার চেষ্টা করার সাথে আমার একই রকম সমস্যা হয়েছিল wc
, যা আমাকে এই পৃষ্ঠায় নিয়ে গেছে। এখানে উত্তরগুলি চেষ্টা করার পরে, ম্যাকের উপর আমার ব্যক্তিগত পরীক্ষার (বিএসডি বাশ) ফলাফলগুলি নিম্নলিখিত are আবার এটি চরিত্র গণনার জন্য; লাইন গণনার জন্য আপনি করতেন 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`;
একটি ভেরিয়েবলের উপর স্ট্রিং.ট্রিম () কমান্ডের মতোও কাজ করে! এটা আশ্চর্যজনকভাবে সহজ। আমি আমার উত্তরে আপনার লাইন যুক্ত করব।
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
কাজটি সুনির্দিষ্টভাবে এবং সংক্ষিপ্তভাবে করে।