मैं अपनी $ फ़ाइल को एक्स लाइनों में आधे हिस्से में विभाजित करना चाहता हूं , और यह जांचें कि लॉग में कितनी लाइनें " मृत " हैं। मैंने निम्नलिखित के साथ शुरुआत की:
half=`expr $(egrep -c . $file) / 2`
sed -n 1,${half}p $file |
xargs echo $file $half $(egrep -c dead $I) > log_1
sed -n ${half},${egrep -c . $file}p |
xargs echo $file $half $(egrep -c dead $I) > log_2
पहले sed
कमांड के लिए आउटपुट ठीक है, लेकिन जब egrep
इसकी सीमा में प्रतिस्थापन sed
गलत हो जाता है:
DeadOrAlive 5 2
-bash: ${half},${egrep -c . $file}p: bad substitution
क्या फ़ाइल को विभाजित करने का एक अधिक कुशल तरीका है bash
?
egrep
गैर-रिक्त रेखाएं गिनाती हैं। grep -c ^ file
खाली लाइनों सहित कुल लाइन गणना का उत्पादन करेगा। (यदि आपकी फ़ाइल में कोई खाली लाइनें नहीं हैं, तो निश्चित रूप से दोनों समान हैं।) wc -l <file
संभवतः तेज़ है क्योंकि इसे किसी भी regex मिलान की आवश्यकता नहीं है। यदि आप विशेष रूप से गैर-खाली लाइनों की गिनती करना चाहते हैं, तो निश्चित रूप से आपको मैचों की जांच करनी होगी।
$I
शामिल होने की उम्मीद करते हैं?
sed "$half,\$"
$half
फ़ाइल के अंत से लाइनों का चयन करेंगे , हालांकि आपके कोड $half
में पहली और दूसरी छमाही दोनों में सबसे मध्य फ़ाइल (लाइन नंबर ) शामिल होगी ।
sed "1,${half}d" file
पहली $half
पंक्तियों को हटा देगा , और बाकी प्रिंट कर देगा। इसके साथ, आप फ़ाइल को दो गैर-अतिव्यापी विभाजन में ठीक से विभाजित कर सकते हैं।
$(...)
और${...}
अलग-अलग निर्माण हैं। पूर्व कमांड प्रतिस्थापन है, बाद वाला पैरामीटर विस्तार है।