আমি কোনও ফাইলের দীর্ঘতম লাইনের দৈর্ঘ্য সন্ধান করার জন্য একটি সহজ উপায় সন্ধান করছি। আদর্শভাবে, এটি কোনও স্ক্রিপ্টের পরিবর্তে একটি সাধারণ বাশ শেল কমান্ড হবে।
আমি কোনও ফাইলের দীর্ঘতম লাইনের দৈর্ঘ্য সন্ধান করার জন্য একটি সহজ উপায় সন্ধান করছি। আদর্শভাবে, এটি কোনও স্ক্রিপ্টের পরিবর্তে একটি সাধারণ বাশ শেল কমান্ড হবে।
উত্তর:
ডাব্লুসিসি (জিএনইউ কোর্টিল) 7.4 ব্যবহার করে:
wc -L filename
দেয়:
101 filename
-L
লোকেলের উপর নির্ভর করে। কিছু চরিত্র (উভয় বাইট এবং মাল্টিবাইট অর্থে) এমনকি মোটেও গণনা করা যায় না!
wc: illegal option -- L usage: wc [-clmw] [file ...]
gwc
হয় coreutils
সূত্র, যা একটি সঙ্গে গনুহ coreutils সব ইনস্টল g
উপসর্গ।
awk '{print length, $0}' Input_file |sort -nr|head -1
রেফারেন্সের জন্য: একটি ফাইলের মধ্যে দীর্ঘতম লাইন সন্ধান করা
END{}
ব্লক থেকে মুদ্রণ করুন ।
awk '{ if (length($0) > max) {max = length($0); maxline = $0} } END { print maxline }' YOURFILE
awk '{ if (length($0) > max) max = length($0) } END { print max }' YOURFILE
awk 'length>max{max=length}END{print max}' file
awk '{ if (length($0) > max) {max = length($0); maxline = $0} } END { print maxline }' YOURFILE | wc -c
কেবল মজাদার এবং শিক্ষামূলক উদ্দেশ্যে, খাঁটি পসিক্স শেল সলিউশন , বিড়ালের অকেজো ব্যবহার ছাড়াই এবং বাহ্যিক আদেশগুলি জোর করে না। ফাইলের নামটিকে প্রথম যুক্তি হিসাবে গ্রহণ করে:
#!/bin/sh
MAX=0 IFS=
while read -r line; do
if [ ${#line} -gt $MAX ]; then MAX=${#line}; fi
done < "$1"
printf "$MAX\n"
< "$1"
স্টিডিন থেকে সহজেই পড়তে পারে। $#
এটির পরীক্ষার সাহায্যে আরগের সংখ্যা নির্ভর করে উভয়ই করতে পারে। এই বিশ্বে কেবল অকেজো বিড়ালের কোনও প্রয়োজন নেই। শুরু থেকেই ঠিক নতুন শিখিয়ে দেওয়া উচিত।
longest < /usr/share/dict/words
perl -ne 'print length()." line $. $_"' myfile | sort -nr | head -n 1
দীর্ঘতম রেখার দৈর্ঘ্য, রেখা নম্বর এবং সামগ্রী মুদ্রণ করে
perl -ne 'print length()." line $. $_"' myfile | sort -n
লাইন সংখ্যা এবং দৈর্ঘ্য সহ সমস্ত লাইনের একটি বাছাই করা তালিকা মুদ্রণ করে
.
সংক্ষিপ্ত অপারেটর - এটি দৈর্ঘ্যের পরে এখানে ব্যবহৃত হয় ()
$.
হ'ল বর্তমান লাইন সংখ্যাটি
$_
বর্তমান লাইন
wc -L
আমি এখন পর্যন্ত দেখেছি সেরা সমাধান।
wc -L
wc -L
কেবল সংখ্যার রেকর্ড গণনা করুন - এই কিউ দীর্ঘতম লাইনটি সন্ধান করতে চলেছিল - একেবারে একই নয়, সুতরাং এটি সঠিক তুলনা নয়।
উপরের উদাহরণগুলিতে গুরুত্বপূর্ণ উপেক্ষিত পয়েন্ট
নিম্নলিখিত 2 টি উদাহরণ বর্ধিত ট্যাবগুলি গণনা করে
wc -L <"${SourceFile}"
# or
expand --tabs=8 "${SourceFile}" | awk '{ if (length($0) > max) {max = length($0)} } END { print max }'
নিম্নলিখিত 2 টি বিহীন ট্যাবগুলি গণনা করুন।
expand --tabs=1 "${SourceFile}" | wc -L
# or
awk '{ if (length($0) > max) {max = length($0)} } END { print max }' "${SourceFile}"
সুতরাং
Expanded nonexpanded
$'nn\tnn' 10 5
সমস্ত উত্তর দেখে মনে হচ্ছে দীর্ঘতম লাইনের লাইন নম্বরটি দেবেন না। নিম্নলিখিত কমান্ড লাইন নম্বর এবং মোট দৈর্ঘ্য দিতে পারে:
$ cat -n test.txt | awk '{print "longest_line_number: " $1 " length_with_line_number: " length}' | sort -k4 -nr | head -3
longest_line_number: 3 length_with_line_number: 13
longest_line_number: 4 length_with_line_number: 12
longest_line_number: 2 length_with_line_number: 11
awk '{print length}' test.txt | sort -rn | head -1
। আপনার যদি সত্যিকারের লাইনের সামগ্রীরও প্রয়োজন হয়, তবে awk '{print length,$0}' test.txt | sort -k1 -rn| head -1
এখানে অ্যানসারটির উল্লেখ রয়েছে
cat filename | awk '{print length, $0}'|sort -nr|head -1
কেবল মজা করার জন্য, এখানে পাওয়ারশেল সংস্করণটি রয়েছে:
cat filename.txt | sort length | select -last 1
এবং মাত্র দৈর্ঘ্য পেতে:
(cat filename.txt | sort length | select -last 1).Length
sort
আর্গুমেন্ট হিসাবে filename.txt নিতে পারেন ? তারপরে বিড়ালটি অকেজো হয় কারণ sort length filename.txt | select -last 1
একটি পাইপ এবং এমন একটি প্রক্রিয়া এড়িয়ে যায় যা কেবল চারপাশের ডেটা অনুলিপি করে।
আমি একটি ইউনিক্স পরিবেশে আছি এবং কয়েক জিবি আকারের জিজেপড ফাইলগুলির সাথে কাজ করছি। আমি 2052 রেকর্ড দৈর্ঘ্যের 2 জিবি গিজিপযুক্ত ফাইল ব্যবহার করে নিম্নলিখিত কমান্ডগুলি পরীক্ষা করেছি।
zcat <gzipped file> | wc -L
এবং
zcat <gzipped file> | awk '{print length}' | sort -u
সময়গুলি অ্যাভারেজে ছিল
117 সেকেন্ড
109 সেকেন্ড
এখানে প্রায় 10 রানের পরে আমার স্ক্রিপ্ট।
START=$(date +%s) ## time of start
zcat $1 | wc -L
END=$(date +%s) ## time of end
DIFF=$(( $END - $START ))
echo "It took $DIFF seconds"
START=$(date +%s) ## time of start
zcat $1 | awk '{print length}' | sort -u
END=$(date +%s) ## time of end
DIFF=$(( $END - $START ))
echo "It took $DIFF seconds"
awk
সংস্করণটি wc
প্রথমে চলমান সংস্করণটির ডিস্ক ব্লক ক্যাশে করার ফলে (এবং ডিস্ক ক্যাশে বীজ দেয়) benefits এই তর্কটি আটকে দেওয়ার জন্য আপনাকে দশ রানের মধ্যে কে প্রথমে ডেকে আনে তার ক্রমটি এলোমেলো করতে হবে।
থিমের উপর পার্থক্য।
এইটি ফাইলটিতে সর্বাধিক দীর্ঘতম লাইনের দৈর্ঘ্যযুক্ত সমস্ত রেখাগুলি প্রদর্শিত হবে, উত্সে প্রদর্শিত ক্রমটি ধরে রাখবে।
FILE=myfile grep `tr -c "\n" "." < $FILE | sort | tail -1` $FILE
তাই মাইফিল
x
mn
xyz
123
abc
দিতে হবে
xyz
123
abc
আপনি যদি ম্যাকওএস ব্যবহার করে থাকেন এবং এই ত্রুটিটি পেয়ে থাকেন:
wc: illegal option -- L
আপনাকে জিএনইউ চূড়ান্তভাবে এটি ইনস্টল করতে হবে না।
আপনি যা করতে চান তা যদি কেবলমাত্র ফাইলের দীর্ঘতম লাইনের অক্ষরের গণনা পাওয়া যায় এবং আপনি ওএস এক্স রান ব্যবহার করছেন:
awk '{print length}' "$file_name" | sort -rn | head -1
এটার মতো কিছু;
echo "The longest line in the file $file_name has $(awk '{print length}' "$file_name" | sort -rn | head -1) characters"
আউটপুট:
The longest line in the file my_file has 117 characters
-c -l -m -w
বিকল্পগুলি পসিক্স।-L
একটি GNUism।