:এর অন্য নাম true। উভয়ই বাশের শেল অন্তর্নির্মিত, তবে এখানে নেই /bin/:, কেবল একটি /bin/true। আউটপুট পুনর্নির্দেশের ফলে open(2)ফাইলটিতে শেল পড়ে O_CREAT|O_TRUNC। যদি কিছু না লেখা থাকে তবে এটি শূন্য দৈর্ঘ্যে থেকে যায়।
এই দুটি টুকরা একসাথে রাখা, :> fileফাইলগুলি কাটা করার জন্য মোটামুটি সাধারণ প্রতিমা i : >fileযদিও বেশিরভাগ লোকেরা লেখার মাধ্যমে এটিকে কম অদ্ভুত করে তোলার চেষ্টা করবেন ।
যেহেতু আপনি ২ য় লাইন সম্পর্কে একটি মন্তব্যে জিজ্ঞাসা করেছেন, তাই আমি আমার মন্তব্যগুলিকে উত্তরে পরিণত করব। (যদিও আপনি আপনার প্রশ্নে এটি জিজ্ঞাসা করেননি))
২ য় লাইনটি এমন একটি লুপ যা otherfileকিছু নামক ভেরিয়েবলের মধ্য থেকে লাইনগুলি পড়ে । লুপের বডি echoতাদের ;পূর্বে যেটি সাদা জায়গা রেখেছিল তার পরিবর্তে সেগুলি পৃথককারীগুলির সাথে মুদ্রণ করতে ব্যবহার করে । fileপ্রতিটি পুনরাবৃত্তি বন্ধ এবং পুনরায় খোলা হয় (সংযোজনের জন্য), কারণ পুনর্নির্দেশ লুপের ভিতরে is ব্যবহারের while ...;do read -r ...;done <otherfile >fileফলে কম স্তন্যপান হবে এবং প্রথমে ফাইল কেটে ফেলা দরকার avoid পালানোর চরিত্র হিসাবে read -rখায় না\
ব্যাশে পাঠ্য প্রক্রিয়াজাতকরণ বেশ ধীর। যে অংশ সম্পূর্ণরূপে এড়ানো সম্ভব নয়: readএকটা সময় (এক এক বাইট যেতে হবে read(2)বাইট প্রতি সিস্টেম কল) একটি লাইনের শেষে overshooting এড়ানো। কাজের জন্য সঠিক সরঞ্জামটি ব্যবহার করা ভাল:
awk -vOFS=';' '{ print $1, $2, $4, $5, $3 }' -- otherfile >file
--মানে আপনার স্ক্রিপ্টটি ভেঙে যায় না যদি otherfileনির্বোধের মতো কিছু দেওয়া হয় --version।
আউটপুট ক্ষেত্র বিভাজক সেট করার ;অর্থ আপনি মুদ্রণের জন্য আরগ হিসাবে কেবল একাধিক ক্ষেত্রগুলি পাস করতে পারেন। শেলটি readশেষ পর্বের সাদা অংশের সাথে পুরো লাইনের পুরো অংশটি নির্ধারিত করে, তবে কেবল মাত্র 5 টি বিভক্ত করার জন্য বিশ্রী বলার কোনও উপায় নেই that's এটি গুরুত্বপূর্ণ, সম্ভবত কেবল বাশ লুপটি ব্যবহার করা চালিয়ে যান কারণ এটি অসুবিধায় অসুবিধাজনক। পার্ল এটিকে সহজ করে তোলে, যেহেতু এটি splitএকটি সর্বাধিক ক্ষেত্রের আরগ নিতে পারে, তবে অ্যাজকের চেয়ে শুরু করা খুব ধীর।
প্রকৃতপক্ষে, এটি প্রমাণিত হয় যে শক্ত নয়, কেবল একটি কুরুচিপূর্ণ লেখাকে লিখতে হবে। $5অজকের পরিবর্তে বাকী-লাইনটি পেতে , ক্ষেত্রগুলিতে লুপিং করা এখনও তাদের আসল সাদা অংশটি হারাবে। আমার প্রথম কার্যক্ষম ধারণাটি হ'ল প্রথম পুরো ক্ষেত্রটি (অর্থাত্ স্পেস দ্বারা নির্ধারিত স্থান) অপসারণ করার জন্য (পুরো লাইনটি) ব্যবহার gensubকরা $0, এবং সমস্ত কিছু রেখে:
awk -vOFS=';' '{ tail = gensub("[[:space:]]*([^[:space:]]+[[:space:]]+){4}", "", 1); print $1, $2, $4, tail, $3 }' -- otherfile >file
আমি প্রথম চেষ্টাতেই পেয়েছিলাম, কিন্তু আমি যে সত্যের জন্য নিজেকে মুগ্ধ করেছিলাম তা এই অ্যাডকো কোডটির পঠনযোগ্যতা সম্পর্কে কিছু বলে। >। <
উল্লেখ্য কিভাবে এটি একই printআগের মতই, কিন্তু সঙ্গে tailস্থানে $5।
echo 'A B c DD e f g f' |
awk -vOFS=\; '{ tail = gensub("[[:space:]]*([^[:space:]]+[[:space:]]+){4}", "", 1);
print $1, $2, $4, tail, $3 }'
A;B;DD;e f g f;c
আমি যদি আক্ষরিক অনুলিপি / পেস্ট করতে পারি এবং এটি আউটপুটে এসেছিল তা দেখাতে পারি তবে এটি আরও চিত্তাকর্ষক হবে। Ash Q দিয়ে ব্যাশে একটি টাইপ করুন। সিটিআরএল-কিউ মানে পরবর্তী কিপ্রেসকে আক্ষরিক চরিত্র হিসাবে উদ্ধৃত করুন, যেহেতু বাশের ইমাক্স-স্টাইল লাইন সম্পাদনাটি এটির জন্য প্রকৃত ইম্যাক্সের সমান।
http://mywiki.wooledge.org/BashFAQ এ স্ক্রিপ্টিং সম্পর্কিত কিছু দরকারী জিনিস রয়েছে যা স্ক্রিপ্টে আপনি যে ডেটা বা ফাইলের নাম নিক্ষেপ করেন তা ভাঙ্গবে না।
:>একক অপারেটর নয়।: > fileপরিবর্তে এটি পড়লে বোঝা সহজ হতে পারে ।