লিনাক্স শেল ডাব্লুসি-সি গণনা অক্ষর +1


17

আমি অক্ষরের সংখ্যা গণনা করতে wc -c কমান্ডটি ব্যবহার করেছি তবে এটি আমাকে একটি ভুল নম্বর, অক্ষরের সংখ্যা এবং একটি উদাহরণ দেয়:

echo "k" | wc -c 

এটি আমাকে 2 টি চরিত্র দেয়

তাহলে কেন 1?


3
-cবিকল্প একটি বাইট গণনা, না একটি অক্ষর সংখ্যা হয়
mcalex

1
-ম, - চরিত্রগুলি মুদ্রণের অঙ্কগুলি মুদ্রণ করে আমিও এই একই সমস্যাটি ব্যবহার করেছি
মোহাম্মদ কর্মী

আপনি ঠিক বলেছেন, আমি ভেবেছিলাম ইউনিকোডটি প্রতি চার বাইট ছিল, তবে মনে হচ্ছে ইউনিতে আসকি অক্ষরগুলি এখনও 1 বাইট। অদ্ভুত। আমি EOL
mcalex

1
হ্যাঁ, আমি একটি ফাইলে "কে" টাইপ করেছি এবং এটি 2 টি অক্ষর দেখায় আমি এটি সরিয়ে দিয়েছি, সুতরাং এটি 0 টি কৌতূহল দেখায়
মোহাম্মদ কর্মী

উত্তর:


19

এর জন্য সহায়তা বার্তাটি একবার দেখুন wc-cবিকল্প অক্ষরের সংখ্যা আউট ছাপে। echoকমান্ড ডিফল্টরূপে একটি newline অক্ষর অন্তর্ভুক্ত করা হয়েছে। যখন wcনিউলাইনটি দেখে এটি এটিকে অন্য একটি চরিত্র হিসাবে গণ্য করে এবং তাই আপনার ফলাফলের অতিরিক্ত গণনা। নীচে প্রদর্শিত বিকল্পগুলির মধ্যে একটি ব্যবহার করে আপনি এটি পেতে পারেন; -wশব্দের সংখ্যা -lগণনা করে এবং রেখার সংখ্যা গণনা করে।

echo "k" | wc -w 
echo "k" | wc -l

আপনি পাইপ আউটপুট করতে wcকরতে awkসম্পর্কে newline অক্ষর ব্যতীত অক্ষরের সংখ্যা পেতে:

wc <filename> | awk '{print $3-$1}'

wcকোনও বিকল্প ছাড়াই ডিফল্ট আউটপুট এই ক্রমে নতুন লাইন অক্ষরের সংখ্যা ($ 1 থেকে awk), শব্দের সংখ্যা এবং অক্ষরের সংখ্যা ($ 3 থেকে awk) মুদ্রণ করে।


ঠিক আছে, সুতরাং একটি শব্দ এবং একটি লাইন আছে, তবে ওপি জানতে চায় কেন দুটি অক্ষর / বাইট রয়েছে
এমকেলেেক্স

আমি শব্দ বা লাইন নয় চরিত্রগুলির সংখ্যা গণনা করতে চাই
মোহাম্মদ কর্মী

6
আহ, তাই বলতে চাইছি echo -n "k" | wc -c। এটি
অর্থবোধ

আমি ফাইলটিতে চরটি রেখেছি এবং এটি এমনটি দেয় যাতে ইওএফ গণনা করা হয়? বা নতুন লাইন বা কি?, আমি একাধিক
চরকে

2
@ ব্যবহারকারী 1865719: যখন ধারাবাহিকতা গুরুত্বপূর্ণ তখন printfপ্রায়শই পছন্দ echoহয়। এটি বিশেষভাবে জিজ্ঞাসা করা না হলে কোনও নিউলাইন মুদ্রণ করে না, সুতরাং printf "k" | wc -mদেয় 1, যেমন মুদ্রিত অক্ষরের সংখ্যা। কোনও ফাইলের প্রথম লাইনে অক্ষর গণনা করতে, কেউ যেমন করতে পারেন $(($(head -1 file | wc -m)-1))( $(())নতুন লাইন গণনা অপসারণের জন্য শেল গাণিতিক করতে এটি মোড়ানো ) বা আরও ভাল: ডাব্লুক ব্যবহার করুন এবং করুন awk 'NR==1{print length}' file
ড্যানিয়েল অ্যান্ডারসন

13

যখন আপনি echo "k", echoকমান্ড যাই হোক না কেন আপনি এটা জিজ্ঞাসা ( "ট") প্রিন্ট আউট করতে একটি newline অক্ষর appends। আপনি এটি -nঅক্ষম করতে বিকল্পটি ব্যবহার করতে পারেন :

echo -n k | wc -c
1

সেই অদৃশ্য চরিত্রটি দেখার জন্য , আপনি ঝরনা ছড়িয়ে দিতে পারেন odবা hd:

echo k | od -t c
0000000   k  \n

echo k | hd
00000000  6b 0a                                             |k.|

echo k | od -t a -A n
   k  nl

6

এটি কারণ আপনি ব্যবহার করছেন echoযা আপনার স্ট্রিংয়ে একটি নতুন লাইন যুক্ত করে। printfপরিবর্তে ব্যবহার করুন:

$ echo k | wc -c 
       2
$ printf k | wc -c
       1
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.