লাইনগুলি সরিয়ে ফেলুন যেখানে একটি ক্ষেত্রের মান 3 এর চেয়ে কম বা সমান - সেড বা বিশ্রী?


17

আমার 8 তম ক্ষেত্রে (কলাম) 2 বা তারও কম মান রয়েছে এমন প্রতিটি লাইন আমাকে সরিয়ে ফেলতে হবে।

আমার ডেটা দেখতে এমন দেখাচ্ছে:

12-31   Airport 189 379 41  49.70946503 -124.91377258   2   2880    30.8
01-01   AlberniElementary   165 331 16  49.26100922 -124.80662537   4   5760    26.1
01-09   BamfieldMarine  161 323 23  48.83490372 -125.13572693   2   2875    27.4
01-10   BamfieldMarine  161 323 23  48.83490372 -125.13572693   3   3068    38.6

আমি বুঝতে পারি যে জাজকে ব্যবহার করে আমি পছন্দসই মানগুলি কেটে ফেলতে পারি এবং সেগুলি অন্য কোনও ফাইলে মুদ্রণ করতে পারি এবং আমি বুঝতে পারি যে সেড বর্তমান ফাইলটি সম্পাদনা করবে। উভয় ক্ষেত্রেই, আমার মূল ফাইলটি ধরে রাখা দরকার।

দ্রষ্টব্য : দয়া করে আপনার সমাধানগুলির সাথে পুরো ব্যাখ্যা দিন। কেবল কমান্ডটি লেখাই যথেষ্ট নয়, দয়া করে পরামর্শগুলি বর্ননা করুন।

আরও দ্রষ্টব্য : ডেটাটির একটি শিরোনাম রেখা রয়েছে, তাই সম্ভবত সমাধানের প্রয়োজন হবে

awk 'FNR> 1'

আমি ধরে নিচ্ছি?

উত্তর:


19

আপনি এটি প্রায় পেয়েছেন।

 awk '(NR>1) && ($8 > 2 ) ' foo > bar

কোথায়

  • NR রেকর্ডের সংখ্যা (এটি লাইন সংখ্যা)
  • $8 আটটি ক্ষেত্র
  • && যৌক্তিক এবং
  • foo মূল ফাইলটি, অপরিবর্তিত
  • bar ফলাফল ফাইল
  • অন্তর্নিহিত ডিফল্ট ক্রিয়া হ'ল বর্তমান ইনপুট লাইনটি মুদ্রণ করা

নোট করুন যে হেডারটি foo থেকে বার পর্যন্ত স্ট্রিপ করা থাকে, এটি রাখতে keep

 awk '(NR==1) || ($8 > 2 ) ' foo > bar

কোথায়

  • || যৌক্তিক বা
  • ইনপুট লাইনটি এনআর == 1 বা $ 8> 2 মুদ্রিত হলে

আপডেট # 1

একটি ব্যাপ্তি নির্দিষ্ট করতে

  • ( ($8 >= -4) && ( $8 <= 4 ) ) -4 থেকে 4 পর্যন্ত 8 ম ক্ষেত্র
  • (NR == 1 ) || ( ($8 >= -4) && ( $8 <= 4 ) ) শিরোনাম সহ একই

দুর্দান্ত উত্তর: সহজ তবে পুরোপুরি, ধন্যবাদ। ঠিক তাই আমি পরিষ্কার, এ ক্ষেত্রে FNR এবং NR এর মধ্যে পার্থক্য কিছুই, সঠিক না? আমি ম্যান পৃষ্ঠাটি পড়েছি যেখানে এটি ব্যাখ্যা করেছে: বর্তমান রেকর্ডের এনআর অর্ডিনাল সংখ্যা এবং বর্তমান ফাইলটিতে বর্তমান রেকর্ডের এফএনআর অর্ডিনাল সংখ্যা। সুতরাং আমি এই ক্ষেত্রে এগুলি সমান বলে বুঝতে পারি, আমি মনে করি :)
জিওক্রাডিং 5'15

আপনার যদি একটি ফাইল থাকে তবে এফএনআর সর্বদা এনআর থাকে, যদি ফাইল 1 এর 10 টি লাইন থাকে তবে ফাইল 2 এর প্রথম লাইনে এনআর = 11 এবং এফএনআর = 1 থাকবে
আর্চেমার

হাই, আমি অনুরূপ কিছু করতে চাই তবে 4 থেকে 4 এর পরিসরে সমস্ত কিছু গ্রহণ করব আমি কীভাবে এটি করতে যাব কারণ এটি কেবলমাত্র অবাস্তব কাজটি করার জন্যই আমি ভাবতে পারি '(এনআর == 1) || ($ 8 = [-4-4]) 'foo> বার
গিলস

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