কীভাবে AWK কমান্ডে একাধিক অনুসন্ধান যুক্ত করা যায়


10

আমি জুন, জুলাই এবং আগস্ট মাসের মধ্যে তৈরি ফাইলগুলি অনুসন্ধান করার চেষ্টা করছি। আমি এই পদ্ধতিটি ব্যবহার করেছি

ls -lrth|awk '/[Jun][Jul][Aug]/ {print}'

কিন্তু এটা কাজ করছে না।


1
রেকর্ডের জন্য, [...]কনস্ট্রাক্টটি একটি একক অক্ষরের সাথে মেলে যা বন্ধনীগুলির মধ্যে যে কোনও একটি চরিত্র হতে পারে। সুতরাং আপনার অভিব্যক্তি JJA বা Jug( Jথেকে [Jun], uথেকে [Jul]এবং gথেকে [Aug]) মিলছে তবে আপনি যে মাসের সংক্ষিপ্তসারটি মিলানোর প্রত্যাশা করেছিলেন তা নয়।
ট্রিপলি

উত্তর:


12

আপনি একাধিক নিদর্শন এর সাথে মেলাতে পারেন:

awk '/Jun/ || /July/ || /Aug/' <(ls -lrh)

এটি জুন, জুলাই বা আগস্ট উভয়ের জন্য সমস্ত ম্যাচ ফেরত দেয় You আপনার printবিবৃতিটির প্রয়োজন নেই কারণ এটি awkডিফল্ট ক্রিয়া।


1
awk বর্ধিত regexps বুঝতে পারে, তাই সহজ হিসাবে আপনি এটি লিখতে পারে হিসাবে হিসাবে একটি প্যাটার্ন জন্য awk '/Jun|Jul|Aug/'অথবাawk '/Ju[nl]|Aug/'
সি এ এস

5

একটি সাধারণ নিয়ম হিসাবে , ls এর আউটপুটকে পার্স করা খুব খারাপ ধারণা । আপনি যা চান তা করার একটি আরও ভাল উপায়

stat -c "%n %y" * | grep 2013-0[678]

বিকল্পভাবে, ফাইল নামটি নিজেই একটি তারিখ যেখানে অসম্ভব ক্ষেত্রে রক্ষা করতে শুধুমাত্র শেষ ক্ষেত্রটি পরীক্ষা করুন:

stat -c "%n %y" *| awk '$NF ~ /2013-0[678]/' 

থেকে man stat:

   -c  --format=FORMAT
          use the specified FORMAT instead of the default; output  a  new
          line after each use of FORMAT

   %y     time of last modification, human-readable
   %n     file name

এটি একটি ভাল উদাহরণ। আমি আগে কখনও স্ট্যাট চেক করিনি। দুর্দান্ত তথ্যের জন্য ধন্যবাদ
ওমিপেনগুইন

হতে পারে ... | awk '$NF ~ /2013-0[678]/'কেবলমাত্র সর্বশেষ আউটপুট ক্ষেত্রটি পরীক্ষা করতে, (অসম্ভব?) এমনকি কোনও ফাইলের নাম রেজেজের সাথে মেলে এমনকি তারিখটি না থাকলেও পরিবর্তন করুন।
ট্রিপলি

3

lsমানুষের পাঠযোগ্য হিসাবে ফাইলগুলির তথ্য প্রদর্শন করার জন্য একটি আদেশ। স্ক্রিপ্টগুলিতে এটি ব্যবহার করবেন না

নির্দিষ্ট মানদণ্ডের সাথে মেলে ডিরেক্টরি ট্রিতে ফাইলগুলি সন্ধানের আদেশ find। আপনার যদি জিএনইউ সন্ধান (যেমন অ-এমবেডড লিনাক্স বা সাইগউইন) বা ফ্রিবিএসডি সন্ধান (যেমন ফ্রিবিএসডি বা ওএসএক্স) থাকে তবে আপনি -newermtনির্দিষ্ট তারিখের পরে শেষবার সংশোধিত ফাইলগুলি মেলানোর জন্য ব্যবহার করতে পারেন ।

find . -newermt '1 June' ! -newermt '1 September' -print

স্ক্রিপ্টটি যখন চালানো হয় তখন ক্যালেন্ডার বছরের চেয়ে আপনি একটি নির্দিষ্ট বছরে ফাইলগুলি মেলাতে চাইলে একটি বছর যুক্ত করুন।

যদি আপনার অনুসন্ধানের বাস্তবায়ন না হয় তবে আপনাকে এটি -newermtকরতে হবে -newerযা findএকটি নির্দিষ্ট ফাইলের সাথে পাওয়া ফাইলটির তারিখের সাথে তুলনা করে । ব্যবহার touchতারিখ যে আপনি একটি সীমানা হিসাবে ব্যবহার করতে চান অস্থায়ী ফাইল তৈরি করুন।

dir=$(mktemp -d)
touch -d 201306010000 "$dir/from"
touch -d 201309010000 "$dir/to"
find . -newer "$dir/from" ! -newer "$dir/to" -print
rm -r "$dir"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.