প্রথম ফাঁকা রেখা পর্যন্ত স্থির পাঠ্য থেকে শুরু করে গ্রেপ


9

আমার কাছে এই জাতীয় একটি ফাইল রয়েছে prova.txt:

Start to grab from here: 1
fix1
fix2
fix3
fix4
random1
random2
random3
random4

extra1
extra2
bla

Start to grab from here: 2
fix1
fix2
fix3
fix4
random1546
random2561

extra2
bla
bla

Start to grab from here: 1
fix1
fix2
fix3
fix4
random1
random22131

এবং আমাকে "এখানে শুরু করতে শুরু করুন" থেকে প্রথম ফাঁকা লাইনে গ্রেপ আউট করতে হবে। আউটপুটটি এর মতো হওয়া উচিত:

Start to grab from here: 1
fix1
fix2
fix3
fix4
random1
random2
random3
random4

Start to grab from here: 2
fix1
fix2
fix3
fix4
random1546
random2561

Start to grab from here: 1
fix1
fix2
fix3
fix4
random1
random22131

আপনি দেখতে পাবেন যে "এখানে দখল শুরু করুন" এর পরে লাইনগুলি এলোমেলো, তাই -এ-বি গ্রেপ পতাকা কাজ করে না:

cat prova.txt | grep "Start to grab from here" -A 15 | grep -B 15 "^$" > output.txt

ফাঁকা রেখা অবধি ("এখান থেকে ধরতে শুরু করুন" হিসাবে) প্রথম লাইন ধরার উপায় খুঁজে পেতে আমাকে কীভাবে সাহায্য করতে পারেন? "এখান থেকে শুরু করতে শুরু করুন" এর পরে আমার কাছে কতগুলি এলোমেলো রেখা থাকবে তা অনুমান করতে পারি না।

যেকোন ইউনিক্স সামঞ্জস্যপূর্ণ সমাধানটির প্রশংসা করা হয় (গ্রেপ, সেড, অ্যাজক পারল বা অনুরূপের চেয়ে ভাল)।

সম্পাদিত: @ জন 1024 দ্বারা উজ্জ্বল প্রতিক্রিয়া পরে, আমি এটি সম্ভব কিনা তা জানতে চাই:

1 the ব্লকটি সাজান (এখান থেকে ধরতে শুরু করুন অনুসারে: 1 তারপরে 1 তারপরে 2)

2 4 সরান 4 (বর্ণানুক্রমিকভাবে এলোমেলো) লাইনগুলি ফিক্স 1, ফিক্স 2, ফিক্স 3, ফিক্স 4 তবে সর্বদা 4

3 ° অবশেষে সাজানো -u কমান্ডের মতো এলোমেলো দুপগুলি সরান

চূড়ান্ত আউটপুট এই মত হতে হবে:

# fix lines removed - match 1 first time
Start to grab from here: 1
random1
random2
random3
random4

#fix lines removed - match 1 second time
Start to grab from here: 1
#random1 removed cause is a dupe
random22131

#fix lines removed - match 2 that comes after 1
Start to grab from here: 2
random1546
random2561

অথবা

# fix lines removed - match 1 first time and the second too
Start to grab from here: 1
random1
random2
random3
random4
#random1 removed cause is a dupe
random22131

#fix lines removed - match 2 that comes after 1
Start to grab from here: 2
random1546
random2561

দ্বিতীয় আউটপুট ভাল যে প্রথম এক। আরও কিছু ইউনিক্স কমান্ড যাদু প্রয়োজন।


1
জাভা জেস্ট্যাক আউটপুট থেকে নির্দিষ্ট থ্রেডের জন্য স্ট্যাক ট্রেস ধরার জন্য এটি সত্যই সহায়ক। খুশি আমি এই প্রশ্নোত্তর খুঁজে পেয়েছি!
বেনিয়ামিনবালার্ড

উত্তর:


13

অজানা ব্যবহার করা হচ্ছে

চেষ্টা করুন:

$ awk '/Start to grab/,/^$/' prova.txt
Start to grab from here: 1
random1
random2
random3
random4

Start to grab from here: 2
random1546
random2561

Start to grab from here: 3
random45
random22131

/Start to grab/,/^$/একটি ব্যাপ্তি সংজ্ঞায়িত করে। এটি যে কোনও লাইন দিয়ে শুরু হয় Start to grabযা প্রথম খালি লাইনের সাথে মেলে এবং শেষ হয় ^$, এর পরে।

সেড ব্যবহার

খুব অনুরূপ যুক্তি সহ:

$ sed -n '/Start to grab/,/^$/p' prova.txt
Start to grab from here: 1
random1
random2
random3
random4

Start to grab from here: 2
random1546
random2561

Start to grab from here: 3
random45
random22131

-nআমরা স্পষ্টভাবে এটি না জিজ্ঞাসা না করে সেডকে কিছু প্রিন্ট না করার কথা বলে। /Start to grab/,/^$/pএটিকে নির্ধারিত পরিসরের যে কোনও লাইন মুদ্রণ করতে বলে /Start to grab/,/^$/


আপনার সমাধানটি নিখুঁত, আমি কিছু যুক্ত করার জন্য আমার জিজ্ঞাসা সম্পাদনা করেছি। নির্ভর করে আপনার সাহায্য প্রশংসা। আপনাকে ধন্যবাদ
হেইসেন

1

আমি একটি বিকল্প সমাধান পোস্ট করছি কারণ এটি কিছু লোকের ক্ষেত্রে ব্যবহারের ক্ষেত্রে কার্যকর হতে পারে। এই সমাধানটি বর্ণিত প্রয়োজনীয়তার সাথে যথাযথভাবে সম্মতি দেয় না, সেরা সমাধানের জন্য @ জন1024 থেকে উত্তরটি দেখুন।

আপনি খালি স্ট্রিংয়ে সেট করে রেকর্ড বিভাজক দিয়ে বিশ্রী ব্যবহার করতে পারেন, খালি এগুলি ফাঁকা নিউলাইন হিসাবে ব্যাখ্যা করবে:

$ awk '/Start/' RS= prova.txt 
Start to grab from here: 1
fix1
fix2
fix3
fix4
random1
random2
random3
random4
Start to grab from here: 2
fix1
fix2
fix3
fix4
random1546
random2561
Start to grab from here: 1
fix1
fix2
fix3
fix4
random1
random22131

এই সংস্করণটি আউটপুটে ফাঁকা নিউলাইনগুলি সংরক্ষণ করে না। এটি উপস্থিত থাকলে ম্যাচের আগে প্রসঙ্গটিও প্রদর্শন করবে। কোনও ফাইলের কোনও কিছুর জন্য গ্রেপিং করার সময় এই আচরণটি খুব কার্যকর হতে পারে এবং আপনি নিউলাইন সীমিত ব্লকটি দেখতে চান এটি এর একটি অংশ, উদাহরণস্বরূপ:

$ awk '/random1546/' RS= prova.txt 
Start to grab from here: 2
fix1
fix2
fix3
fix4
random1546
random2561

উদাহরণস্বরূপ, iniফাইলগুলিতে জিনিসগুলির জন্য গ্রেপিংয়ের সময় আমি এটি দরকারী মনে করি ।

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