সত্য এবং মিথ্যা অজানা অবস্থা


9

আমি জুড়ে এসেছি যে আমরা যদি awk 0 inputfileএটি ব্যবহার করি তবে এটি কোনও কারণ মুদ্রণ করবে না কারণ 0শর্তটি মিথ্যা।

আমরা যদি ব্যবহার awk 1 inputfileকরি তবে এটি 1প্রতিটি লাইন অ্যাজক ব্যাখ্যার জন্য সত্য হিসাবে সবকিছু মুদ্রণ করবে ।

আমরা যদি awk any_string inputfileএটি ব্যবহার করি তবে এটি কোনও মুদ্রণ দেবে না কারণ সমস্ত জাজ ভেরিয়েবল শূন্য হিসাবে আদি হিসাবে এটি মিথ্যা।

তবে আমরা যদি awk any_integer inputfileএটি ব্যবহার করি তবে এটি সত্য হয়ে উঠবে এবং ফাইলটির প্রতিটি লাইন মুদ্রণ করবে, আমি কি কারণ জানতে পারি?

জিএনইউ awkম্যানুয়ালটিতে যদিও এর ব্যাখ্যা দেওয়া হয়েছে আমি খুঁজে পাচ্ছি না ।


3
দ্বারা any_integerআমি আপনার মত গড় আক্ষরিক সংখ্যা অনুমান করা 7, 89ইত্যাদি .. যদি তাই হয়, কারণ চেয়ে কোন সংখ্যা অন্য 0উপায়ে trueশর্ত
Sundeep

উত্তর:


13

সত্যিকারের জন্য সত্যিকার অর্থে হয় একটি খালি-খালি স্ট্রিং বা একটি শূন্য নম্বরের সংখ্যা (সংখ্যার সাথে দশমিক পূর্ণসংখ্যা বা ভাসমান বিন্দু এবং কিছু অজগর বাস্তবায়নের সাথে হেক্সাডেসিমাল বা অষ্টালও সমর্থিত হয়)। ডাবল উদ্ধৃতিতে অন্তর্ভুক্ত জিনিসগুলি হ'ল স্ট্রিং, অব্যক্ত আক্ষরিক সংখ্যাগুলি সংখ্যা, তবে অন্য কোনও কিছুর জন্য, কিছু স্ট্রিং বা একটি সংখ্যা হিসাবে বিবেচনা করা উচিত কিনা তা নির্ধারণ করার জন্য জটিল বিধি রয়েছে। জিএনইউ awkম্যানুয়ালটিতে একটি পুরো অধ্যায় রয়েছে

সত্য:

  • awk '1' (অ-শূন্য নম্বর)
  • awk '1e8' (অ-শূন্য নম্বর)
  • awk '-0.01' (অ-শূন্য নম্বর)
  • awk '"foo"' (খালি খালি স্ট্রিং)
  • awk '"0"' (খালি খালি স্ট্রিং)
  • awk '0 ""' (সংক্ষেপণ একটি স্ট্রিং দেয় যা এখানে খালি নয়)
  • echo 0 | awk '$1 ""' (একটি field n ক্ষেত্রের জন্য একই)
  • awk 'substr("000", 1, 1)'(ফলাফল substr()সর্বদা একটি স্ট্রিং হয়)
  • echo '0foo' | awk '$0' ($ 0 একটি অ-সংখ্যাসূচক স্ট্রিং তাই স্ট্রিং হিসাবে বিবেচনা করা হয় (খালি নয়))

মিথ্যা:

  • awk '0' (0 নম্বর)
  • awk '""' (খালি স্ট্রিং)
  • echo 0000e123 | awk '$1' ($ 1টিকে একটি সংখ্যা হিসাবে বিবেচনা করা হয় যদি এটি একটি সংখ্যার স্ট্রিং হয় যা এটি এখানে এবং 0 হচ্ছে)
  • echo ' 0 ' | awk '$0' (স্ট্রিং সংখ্যাসঙ্গিক কিনা তা নির্ধারণের জন্য নেতৃস্থানীয় এবং পিছনের স্থানগুলি উপেক্ষা করা হয়)।
  • awk '" 2foo" - 2' (একটি গাণিতিক এক্সপ্রেশন জড়িত একটি স্ট্রিং নম্বর উপেক্ষা গত কিছু সঙ্গে একটি সংখ্যায় রূপান্তরিত হয়)
  • awk 'unset_or_empty_variable' (খালি স্ট্রিং)
  • awk '"non-numerical-string" + 0'

YMMV:

  • awk '1e-500' (কেউ কেউ অভিযোগ করবে, কেউ এটিকে 0 হিসাবে গণ্য করবে)
  • awk '"0x1" + 0'(সমস্ত জাঁক বাস্তবায়ন হেক্সাডেসিমালকে সমর্থন করে না , যা অন্যকে "0x1"রূপান্তরিত হয় সেগুলিতে P পোসিক্স স্পেসিফিকেশনের কিছু সংস্করণ অযাচিতভাবে সেই হেক্স নম্বরটি সমর্থন করার জন্য বাস্তবায়ন প্রয়োজন এবং এটি পরে প্রত্যাহার করা হয়েছে Still তবুও সেই হেক্স নম্বরটি স্বীকৃতি দেয় না পরিবেশ)10gawkPOSIXLY_CORRECT
  • awk '010 - 8' (একই (অক্টোবরের জন্য 010 এখানে একটি স্ট্রিং থেকে রূপান্তর করার বিপরীতে আক্ষরিক হিসাবে যথেষ্ট নয়))
  • awk '0x1 - 1'(চালু awkবাস্তবায়নের যে হেক্স সংখ্যার সমর্থন করি না, 0x1এর সংযুক্তকরণের হয় 0এবং x1পরিবর্তনশীল যা উৎপাদনের "0"যা অবশ্যই একটি সংখ্যা (0) রূপান্তরিত হয়, যদি আপনি বিয়োগ 1আপনি পেতে -1যা নন-জিরো সংখ্যা)।

এর অর্থ হ'ল আপনি যদি স্ট্রিংটি খালি নেই কিনা তা পরীক্ষা করতে চান তবে আপনার করা উচিত নয়:

awk '$ 1 {মুদ্রণ করুন $ 1, "খালি নেই"}'

কিন্তু

awk '$1 != "" {print $1, "is not empty"}'

অন্যথায় এটি না বলে 0বা -0000E+00001234খালি নয়।


চিত্তাকর্ষক এবং বিস্তারিত উত্তর! যদিও একটি প্রশ্ন: আপনি যে চূড়ান্ত উদাহরণ দিয়েছিলেন তাতে আমি বাক্য গঠন চেষ্টা করেছি এবং প্রথমটি কাজ করে, যেখানে এটি $ 1 এড়িয়ে যায় যা খালি থাকে এবং কেবল সেই লাইনটি $ 1 খালি দিয়ে মুদ্রণ করে, কারণ যদি $ 1 খালি স্ট্রিং হয় তবে এটি হবে মিথ্যা, এবং এইভাবে আউটপুট মুদ্রণ না, তাই না?
sylye
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.