ডাব্লুসি-এল একটি ট্যাব-চরের জন্য 8-র একটি লাইন দৈর্ঘ্য প্রতিবেদন করে। বাগ বা ফিচার?


12

-Lএর একটি দরকারী বৈশিষ্ট্য wc, বা তাই আমি ভেবেছিলাম। এটি দীর্ঘতম লাইনের দৈর্ঘ্য মুদ্রণ করে। কোনও কারণে এটি একক-বাইট ট্যাব-চারটি 8 টি দৈর্ঘ্যে
প্রসারিত করে এটি ট্যাবটিকে "প্রসারিত" না করার জন্য সেট করার কোনও উপায় আছে কি? এবং এই বিস্তারের পিছনে যুক্তি কী হতে পারে?

echo -n $'\t' | wc -L

আউটপুট 8

ডাব্লুসিসি (জিএনইউ কোর্টিল) 7.4
জিএনইউ ব্যাশ, সংস্করণ 4.1.5


-N প্রশ্নের অর্থেগোনাল।
ব্যবহারকারী অজানা

উত্তর:


11

আমি এটি সম্পর্কিত কোনও বাগ রিপোর্ট এবং উত্স ফাইলে নিম্নলিখিত লাইনগুলি পাই না wc.c

    case '\t':
        linepos += 8 - (linepos % 8);

মনে হয় ইচ্ছাকৃতভাবে এইভাবে আচরণ করা বেছে নেওয়া হয়েছে, সম্ভবত স্ক্রিনে ফাইলটি প্রদর্শনের জন্য প্রস্থের জন্য একটি ইঙ্গিত দিতে হবে।

একটি দ্রুত বিকল্প হতে পারে

echo -n $'\t' | tr '\t' ' ' | wc -L

2
ধন্যবাদ এনজো, আমি এখন দেখতে পেয়েছি যে যদিও man wcএই সমস্যাটির কোনও উল্লেখ করা হয়নি, তবে এটিতে বর্ণিত হয়েছে info coreutils 'wc invocation'(যা 'মানুষ' বোঝায়) ... এছাড়াও, গুগল-গোলকটিকে আরও কিছুটা ট্রল করার পরেও আমি এটি একটি বিকল্প হিসাবে পেয়েছি echo -n $'\t' | expand -t1 | wc -Lযা আপনার বিকল্প হিসাবে প্রায় একই, তবে আমি এটি ভাল পরিমাপের জন্য ফেলে দিয়েছি .. এবং যদিও নীচের লিঙ্কটি একটি রিকম্পাইল ডাব্লু হ্যাক * , এটি কারও পক্ষে আগ্রহী হতে পারে: বিভিন্ন ট্যাব প্রস্থের জন্য WC সমর্থন
পিটার.ও

1

সাধারণত একটি ট্যাব পরবর্তী অবস্থানে প্রসারিত হয় (8 দ্বারা বিভাজ্য) + 1 [1, 9, 17, 25, ...], সুতরাং আপনি যদি এটি জিজ্ঞাসা করেন তবে আপনি এটি পান।

নোট, যে -n প্রশ্নের জন্য অপ্রাসঙ্গিক, কিন্তু $ হয় না।

echo foo$'\t' | wc -L

8 ফিরে আসবে, কারণ

echo foo$'\t'bar 
foo     bar

আপনি যদি প্রতিধ্বনির জন্য -e ব্যবহার করেন তবে আপনি om বাদ দিতে পারেন:

echo -e '\t' | wc -L
8

সুতরাং আপনি যদি '\ t' কে একক বাইট হিসাবে গণনা করতে চান তবে কেবল বাদ দিন e এবং:

echo '\t' | wc -L
2

হ্যাঁ, ট্যাব বিস্তৃত একটি মুদ্রিত / প্রদর্শিত আউটপুট জন্য সাধারণ যথেষ্ট, কিন্তু আমি এটা অদ্ভুত দেখা গেছে যে একটি প্রোগ্রাম যা গন্য বাইট এবং শব্দ গণনা হবে 1 ছাড়া আর কিছু চরিত্রেও 1 চরিত্র ... BTW echo '\t'নেই আউটপুট একটি ট্যাব-অক্ষর (\ x09)। এটি এমন একটি রেখাকে আউটপুট করে যার দৈর্ঘ্য 2, অর্থাৎ। a '\'এবং a 't'। একটি নিউলাইন কোনও লাইনের দৈর্ঘ্যের অংশ নয় ... ( -nআমার উদাহরণে একটি পরীক্ষা wcআছে যা সঠিকভাবে কোনও ফাইলের প্রক্রিয়াকরণ করবে যাতে কোন পেছনের নিউলাইন-চর নেই ...)
পিটার.ও

wc --helpবলেছেন: -L, --max-line-length print the length of the longest line?। এটি বাইট সম্পর্কে কথা বলে না, তবে লাইন দৈর্ঘ্য।
ব্যবহারকারী অজানা

1
হ্যাঁ, এটি "দীর্ঘতম লাইনের দৈর্ঘ্য মুদ্রণ করুন" বলে ... `তবে এটি বলে না " আমরা ধরে নিই যে আপনি ট্যাবগুলি প্রসারিত করতে চান (অন্যান্য অক্ষরের মতো সাধারণ চরিত্রের গণনা নয়) .. ওহ, উপায়, আপনার নির্দিষ্ট ট্যাবগুলি কী সেট করা আছে তা বিবেচনা না করেই আমরা ট্যাবগুলি 8 টি স্পেসে প্রসারিত করব "" ... এটি ফাঁদ .. এটি সঠিকভাবে নথিভুক্ত করা হয় না।
পিটার.ও

আপনি ট্যাবটি কীভাবে সেট করবেন? বাশে? উপরন্তু: ট্যাব 8 শূণ্যস্থান প্রসারিত হয় না, কিন্তু পদে দেখতে echo -e foo'\t'bar | wc -L, 11 যা ফলাফলে না 14.
ব্যবহারকারী অজানা

উপরে foo\tbarউদাহরণস্বরূপ, wcকরেছে অধিকৃত একটি নামমাত্র ব্যবধান ট্যাব স্টপ 8 ... নিম্নলিখিত উদাহরণে দেখায় কিভাবে wcবর্তমানে সক্রিয় ট্যাব-থামুন সেটিংস উপেক্ষা করে। এটা তোলে টার্মিনাল যা 8 টার্মিনাল-কলাম চওড়া / দীর্ঘ, এখনো করেন এমন একটি লাইন আউটপুট wcরিপোর্ট এটা 11. প্রত্যেক 6 ষ্ঠ কলামে এই উদাহরণটিতে সেট ট্যাব-স্টপ হতে ...tabs -6; echo 12345678; echo -e "foo\tbar"|tee >(wc -L)
Peter.O

0

ডাব্লুসিএল-এল বর্ণনাটি অস্পষ্ট ছিল। এটি প্রস্থের প্রস্থের প্রস্থটি প্রদান করে। ট্যাব সম্প্রসারণ নিয়ন্ত্রণ করতে আপনি expandপ্রথমে ফিল্টার করতে পারেন ।

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