আমার কাছে এই জাতীয় একটি সিএসভি ফাইল রয়েছে:
abd,123,egypt,78
cde,456,england,45
আমি কীভাবে কেবল তৃতীয় কলামের শব্দের চরিত্র গণনা পেতে পারি?
এটি কীভাবে করা যায় তা আমি বুঝতে পারি না wc।
আমার কাছে এই জাতীয় একটি সিএসভি ফাইল রয়েছে:
abd,123,egypt,78
cde,456,england,45
আমি কীভাবে কেবল তৃতীয় কলামের শব্দের চরিত্র গণনা পেতে পারি?
এটি কীভাবে করা যায় তা আমি বুঝতে পারি না wc।
উত্তর:
cut -d, -f3 | tr -d '\n' | wc -m
(মনে রাখবেন যে wc -cবাইটগুলি গণনা করা হয়েছে, অক্ষর নয়:
$ echo a,1,españa,2 | cut -d, -f3 | tr -d '\n' | wc -c
7
$ echo a,1,españa,2 | cut -d, -f3 | tr -d '\n' | wc -m
6
)
wcআমাকে চরিত্রের গণনা দিতে সক্ষম হলাম না কেন আমি wcএই প্রসঙ্গে কীভাবে ব্যবহার করব তা দেখায় ।
awk -F, '{sum+=length($3)}; END {print +sum}' file
awkকলাম ভিত্তিক ফাইলগুলি লাইন বাই লাইন প্রক্রিয়াকরণের জন্য ডিজাইন করা হয়েছিল। সমস্যাটি পুরোপুরি সরঞ্জামটির জন্য উপযুক্ত।
0যখন ইনপুট ফাইলটি খালি থাকে তখন খালি লাইনের পরিবর্তে মুদ্রণ করা।
awkটিপিক্যাল ইউনিক্স স্পিরিটে কেসকে (একই সাথে কাজ করা) সহযোগিতা করার মাধ্যমে 3 টি বেসিক ইউটিলিটিগুলি (তাদের প্রত্যেকের আকারের একটি ভগ্নাংশ ) রেখে কাজটি অর্জন করা যেতে পারে । আপনি খেয়াল করতে পারেন যে কাটা + টিআর + ডাব্লুসি এক যেভাবে 5 টি প্রকারের দ্রুত এই খাঁজটি নিজের থেকে 5 গুণ তত দ্রুত গতিযুক্ত perl। (কমপক্ষে আমার সিস্টেমে, কোনও ইউটিএফ 8 লোকালে, 100 এমবি ফাইলে চেষ্টা করা হয়েছে)।
একটি perlসমাধান:
perl -Mopen=:locale -F, -anle '$sum += length($F[2]); END{print $sum}' file
বা একটি সংক্ষিপ্ত সংস্করণ:
perl -Mopen=:locale -F, -anle '$sum += length($F[2])}{print $sum' file
-Mopen=:localeজন্য perlব্যবহারকারী / সিস্টেমের কি একটি চরিত্র সংজ্ঞা ব্যবহার, অন্যথায় এটি অনুমান অক্ষর বাইট হয়। a,1,españa,2কোনও ইউটিএফ -8 লোকালে (বেশিরভাগ সিস্টেমে ডিফল্ট) কোনও ইনপুট চেষ্টা করে দেখুন ।
আপনার নমুনা ফাইলটির মতো:
$ cat sample.txt
abd,123,egypt,78
cde,456,england,45
$ awk -F, '{print $3}' sample.txt | while read i; do echo "$i" | \
tr -d '\n' | wc -m; done
5
7
নিয়ে কাজ করা wcপ্রতিটি লাইনে এর গণনা পেতে চতুর হতে পারে। আপনাকে কলাম 3 থেকে প্রতিটি স্ট্রিংয়ের জন্য পৃথকভাবে কল করতে হবে যা আপনি যা চান তা করা কিছুটা জটিল করে তোলে। আপনার সিএসভিতে প্রতিটি সারিটি দেখতে হবে, কলাম 3 বের করুন এবং তারপরে wcঅক্ষর গণনা পেতে উপস্থাপন করতে হবে।
ব্যবহার sedএবংawk
sed 's/.*,.*,\(.*\),.*/\1/g' file | awk -v FS="" '{print NF;}'
উদাহরণ:
$ (echo abd,123,egypt,78; echo cde,456,england,45;) | sed 's/.*,.*,\(.*\),.*/\1/g' | awk -v FS="" '{print NF;}'
5
7
দু'টা অবাক
awk -F, '{print $3}' file | awk -v FS="" '{print NF;}'
উদাহরণ:
$ (echo abd,123,egypt,78; echo cde,456,england,45;) | awk -F, '{print $3}'| awk -v FS="" '{print NF;}'
5
7
wcআউটপুট পেতে আমি কমান্ড ব্যবহার করতে পারছি না !'