আমি কীভাবে একটি নির্দিষ্ট কলামে শব্দের চরিত্র সংখ্যা পেতে পারি?


12

আমার কাছে এই জাতীয় একটি সিএসভি ফাইল রয়েছে:

abd,123,egypt,78
cde,456,england,45

আমি কীভাবে কেবল তৃতীয় কলামের শব্দের চরিত্র গণনা পেতে পারি?

এটি কীভাবে করা যায় তা আমি বুঝতে পারি না wc

উত্তর:


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

3
@ মিকসার্ভ, যা আমি ব্যাখ্যা করি যেহেতু আমি wcআমাকে চরিত্রের গণনা দিতে সক্ষম হলাম না কেন আমি wcএই প্রসঙ্গে কীভাবে ব্যবহার করব তা দেখায় ।
স্টাফেন চেজেলাস

ওহ .... এটি একটি খুব বৈধ ব্যাখ্যা যা আমার কাছে কখনই ঘটেনি ...
মাইকজার্ভ

22
awk -F, '{sum+=length($3)}; END {print +sum}' file

3
আমেন; awkকলাম ভিত্তিক ফাইলগুলি লাইন বাই লাইন প্রক্রিয়াকরণের জন্য ডিজাইন করা হয়েছিল। সমস্যাটি পুরোপুরি সরঞ্জামটির জন্য উপযুক্ত।
রায়

{মুদ্রণ + যোগ + এর উদ্দেশ্য কী? {মুদ্রণ যোগ just ঠিক পাশাপাশি কাজ করে।
spuder

3
@ স্পডার, 0যখন ইনপুট ফাইলটি খালি থাকে তখন খালি লাইনের পরিবর্তে মুদ্রণ করা।
স্টাফেন চেজেলাস

2
@ রে, অন্যদিকে, awkটিপিক্যাল ইউনিক্স স্পিরিটে কেসকে (একই সাথে কাজ করা) সহযোগিতা করার মাধ্যমে 3 টি বেসিক ইউটিলিটিগুলি (তাদের প্রত্যেকের আকারের একটি ভগ্নাংশ ) রেখে কাজটি অর্জন করা যেতে পারে । আপনি খেয়াল করতে পারেন যে কাটা + টিআর + ডাব্লুসি এক যেভাবে 5 টি প্রকারের দ্রুত এই খাঁজটি নিজের থেকে 5 গুণ তত দ্রুত গতিযুক্ত perl। (কমপক্ষে আমার সিস্টেমে, কোনও ইউটিএফ 8 লোকালে, 100 এমবি ফাইলে চেষ্টা করা হয়েছে)।
স্টাফেন চেজেলাস

5

একটি 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 লোকালে (বেশিরভাগ সিস্টেমে ডিফল্ট) কোনও ইনপুট চেষ্টা করে দেখুন ।
স্টাফেন চেজেলাস

@ স্টাফেনচাজেলাস: ওহ, আমার উত্তর আপডেট করেছে। ভাল পয়েন্ট জন্য ধন্যবাদ!
cuonglm

3
cut -d, -f3 <<\DATA | grep -o . | grep -c .
abd,123,egypt,78
cde,456,england,45
DATA

#OUTPUT
12

3

আপনি ব্যবহার করতে পারে

awk -F, '{printf "%s", $3}' file | wc -m


1

আপনার নমুনা ফাইলটির মতো:

$ 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অক্ষর গণনা পেতে উপস্থাপন করতে হবে।


0

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