मेरे पास एक फाइल 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
क्या आप एक रास्ता खोजने में मेरी मदद कर सकते हैं जो पहली पंक्ति को पकड़ लेगा जिसे पकड़ा जाएगा (जैसा कि "यहां से शुरू करना है"), एक खाली रेखा तक। मैं अनुमान नहीं लगा सकता कि "यहां से हड़पने की शुरुआत करें" के बाद मेरे पास कितनी यादृच्छिक रेखाएँ होंगी।
किसी भी यूनिक्स संगत समाधान की सराहना की जाती है (grep, sed, awk बेहतर है पर्ल या समान)।
आदर्श: @ john1024 द्वारा शानदार प्रतिक्रिया के बाद, मैं यह जानना चाहूंगा कि क्या यह संभव है:
1 ° ब्लॉक को क्रमबद्ध करें (यहाँ से शुरू करने के लिए अनुसार: 1 फिर 1 फिर 2)
2 ° निकालें 4 (वर्णानुक्रमिक रूप से यादृच्छिक) लाइनें fix1, fix2, fix3, fix4 लेकिन हमेशा 4 होती हैं
3 ° अंततः सॉर्ट-ड्यू कमांड की तरह रैंडम ड्यूप्स को हटाता है
अंतिम आउटपुट शूल इस तरह होना चाहिए:
# 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
दूसरा आउटपुट बेहतर है कि पहला वाला। कुछ अन्य यूनिक्स कमांड जादू की जरूरत है।