আমার কাছে এই জাতীয় একটি সিএসভি ফাইল রয়েছে:
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
আউটপুট পেতে আমি কমান্ড ব্যবহার করতে পারছি না !'