আমি seqপ্রতি লাইনে একটি করে পূর্ণসংখ্যার ক্রম উত্পন্ন করার কমান্ডটি জানি , তবে আমি দুটি প্রশ্ন জিজ্ঞাসা করতে চাই:
একই লাইনে ক্রমিকের সংখ্যাগুলি লেখা কি সম্ভব?
একটি সাদা স্থান দ্বারা পৃথক সংখ্যার ক্রম দিয়ে তৈরি একটি স্ট্রিং তৈরি করা সম্ভব?
আমি seqপ্রতি লাইনে একটি করে পূর্ণসংখ্যার ক্রম উত্পন্ন করার কমান্ডটি জানি , তবে আমি দুটি প্রশ্ন জিজ্ঞাসা করতে চাই:
একই লাইনে ক্রমিকের সংখ্যাগুলি লেখা কি সম্ভব?
একটি সাদা স্থান দ্বারা পৃথক সংখ্যার ক্রম দিয়ে তৈরি একটি স্ট্রিং তৈরি করা সম্ভব?
উত্তর:
সঙ্গে bash, zshএবং ksh93, আপনি ব্যবহার করতে পারেন {start..end..step} বক্রবন্ধনী সম্প্রসারণ ফর্ম :
$ echo {1..10}
1 2 3 4 5 6 7 8 9 10
সমস্ত শেল এবং সিক রয়েছে এমন যে কোনও সিস্টেমে পোর্টেবল (এই প্রশ্নগুলি ট্যাগ হিসাবে)
শুরুটি যদি 1 হয়:
$ echo $(seq 10)
1 2 3 4 5 6 7 8 9 10
অন্যথায়:
$ echo $(seq 5 10)
5 6 7 8 9 10
বিসি সহ:
$ echo $(echo "for (i=0;i<=1000;i++) i"| bc)
ব্যাশে
echo {1..10}
এই ইকো সমাধানটি কাজ করে যদি আইএফএসের মানটিতে একটি নতুন লাইন থাকে যা এটি ডিফল্টরূপে করে।
ডিফল্টরূপে আইএফএস <স্পেস> << ট্যাব> <নিউলাইন> সিকোয়েন্সে সেট করা হয় । এবং শেলের প্রতিটি পরিষ্কার শুরু করার জন্য পুনরায় সেট করা হয়। তবে, যদি আপনার কোনও উদ্বেগ থাকে যে এটি কিছু চূড়ান্ত কোণায় পরিবর্তিত হতে পারে, তবে আমাদের বেশ কয়েকটি সমাধান রয়েছে।
বাশ, zsh, ksh এর অধীনে কেবলমাত্র ব্যবহার করুন: আইএফএস = $ '\ t \ n' (এই উত্তরটির সমস্ত অংশ এড়িয়ে যান)।
তবে sh এর অধীনে আইএফএসের মান পুনরায় সেট করা জটিল হতে পারে এখানে পুরো বিশদটি পড়ুন ।
$ unset IFS; echo $(seq 5 10) #Always work.
সর্বদা কাজ করবে। প্রদত্ত যে নীচে কোনও কোড (বা চাইল্ড স্ক্রিপ্ট) থাকবে না যার জন্য আইএফএস সেট প্রয়োজন, যেমন কোনও স্ক্রিপ্ট যা করে OldIFS="$IFS"।
শের জন্য একটি কৌশল ব্যবহার করা:
sh -c 'IFS="$(printf " \t\nx")"; IFS="${IFS%x}"; printf "$IFS"|xxd' # correct.
IFS='<space><tab><newline>' যেখানে ঐ <space>, <tab>, <newline>সংশ্লিষ্ট আক্ষরিক অক্ষর।
seq 10 |xargs
... অথবা ...
seq 10 |paste -s -
উপরের দুটি কমান্ড শ্বেত স্পেস দ্বারা পূর্ণসংখ্যা পৃথক করবে। xargsঅনুকরণে ডিফল্ট /bin/echoএবং সুতরাং প্রতিটি পূর্ণসংখ্যা একক স্থান দ্বারা পৃথক করা হয়। যদিও এটি 128K দৈর্ঘ্যের সর্বাধিক কমান্ড লাইনের দৈর্ঘ্যে ডিফল্ট হবে। আপনি এটি সামঞ্জস্য করতে পারেন ...
seq 100000 | xargs -s2093009 | wc -l
... প্রিন্ট ১। আমি এখানে মূল্যটি -sস্বেচ্ছাচারিত নয় - উচ্চতর মান (যা দৃশ্যত যেভাবেই কাজ করেছিল) চেষ্টা করার পরে আমি পেয়েছি তবে পরবর্তীকালে xargsসহায়ক বার্তাটি মুদ্রিত হয়েছে:
-s value should be <2093010
pasteদু'জনের মধ্যে একটি (আমার জ্ঞানের কাছে) স্বেচ্ছাসেবী দৈর্ঘ্যের লাইনগুলি পরিচালনা করার জন্য পসিক্স-অনুমোদিত অনুমোদিত ইউটিলিটিগুলি:
pasteস্পেসিফিকেশন অ্যাপ্লিকেশন ব্যবহার :বেশিরভাগ স্ট্যান্ডার্ড ইউটিলিটিগুলি টেক্সট ফাইলগুলিতে কাজ করে ।
cutউপযোগ একই তথ্য ধারণকারী পাঠ্য ফাইল একটি সেট মধ্যে অবাধ লাইন লেন্থ ফাইল চালু করতে ব্যবহার করা যাবে।pasteউপযোগ (অথবা পুনঃ) নির্বিচারে লাইন লেন্থ সঙ্গে ফাইল তৈরি করতে ব্যবহার করা যাবে।একটি ফাইল যা শূন্য বা আরও বেশি লাইনে বিভক্ত অক্ষর ধারণ করে। লাইনগুলিতে NUL টি অক্ষর থাকে না
{LINE_MAX}এবং\nইওলাইন অক্ষর সহ দৈর্ঘ্যে কোনও বাইট অতিক্রম করতে পারে না । যদিও POSIX.1-2-2008 পাঠ্য ফাইল এবং বাইনারি ফাইলগুলির মধ্যে পার্থক্য না করে (আইএসও সি স্ট্যান্ডার্ড দেখুন) , অনেকগুলি ইউটিলিটি কেবল পাঠ্য ফাইলগুলিতে অপারেটিং করার সময় অনুমানযোগ্য বা অর্থপূর্ণ আউটপুট তৈরি করে। যে স্ট্যান্ডার্ড ইউটিলিটিগুলির মধ্যে এই জাতীয় বিধিনিষেধ রয়েছে তারা সর্বদা তাদের STDIN বা ইনপুট ফাইল বিভাগে পাঠ্য ফাইল নির্দিষ্ট করে ।
pasteকোনও ট্যাব ডিলিমিটারে ডিফল্ট হয় এবং তাই দ্বিতীয় কমান্ড অনুসরণ করে প্রতিটি পূর্ণসংখ্যার মধ্যে একটি ট্যাব থাকবে। আপনি করতে পারেন ...
seq 10 |paste -sd ' ' -
... -dআচরণের পরিবর্তন করতে এলিমিটার সুইচ ব্যবহার করুন,
seq 10 | xargsভাল কাজ করে, তবে কমান্ড লাইন সীমাবদ্ধতার কারণে, seq 100000 | xargs5 টি \nসীমিত লাইন (আমার সিস্টেমে) আউটপুট দেয়
paste and কাট` হ'ল সালিস দৈর্ঘ্যের লাইনের সাথে কাজ করার জন্য দুটি পসিক্স অনুমোদিত অনুমোদিত ইউটিলিটি। এটা বলেছে, xargs | xargsএকটি বিকল্প। অন্যথায়seq 100000|tr \\n \
$IFSএকটি সংখ্যায় সেট করার চেষ্টা করবেন না ? এবং bashযাইহোক এর ধার্মিক গতিতে। আপনার উত্তরে আপনি যে বিষয়ে কথা বলছেন sh- আপনার এমনকি $IFSসেই প্রসঙ্গে সেট করার দরকার নেই - এটি যদি সেখানে সেট করা থাকে তবে পরিবেশের মধ্য দিয়ে যেতে হবে। এবং এটি কোনও সংক্ষিপ্ততর নয় seq 100000|paste -sযার চেয়ে এটি কার্য সম্পাদন-ভিত্তিক 5: 1 কে পরাজিত করে। এবং pasteডাব্লু / কোন গ্যাটাচস আসে না।
$IFS- আমি এটি সমস্ত সময় ব্যবহার করি - তবে আমি সেট না করা এবং আপনি না করা পর্যন্ত আমি এটি ব্যবহার করি না । বিশেষত আপনার এলোমেলো অচেনা লোকদের পরামর্শ দেওয়া উচিত নয় যারা জানেন না যে আরও ভাল থাই করা উচিত। এটি সুযোগে রাখবেন না - এটি একটি কম্পিউটার প্রোগ্রাম। এটি অপ্রত্যাশিতভাবে আচরণ করলে এটি একটি বাগ - কেন এটি এটি হতে দেবে?
echo $(seq 1 10)