मैं अपनी $ फ़ाइल को एक्स लाइनों में आधे हिस्से में विभाजित करना चाहता हूं , और यह जांचें कि लॉग में कितनी लाइनें " मृत " हैं। मैंने निम्नलिखित के साथ शुरुआत की:
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पंक्तियों को हटा देगा , और बाकी प्रिंट कर देगा। इसके साथ, आप फ़ाइल को दो गैर-अतिव्यापी विभाजन में ठीक से विभाजित कर सकते हैं।
$(...)और${...}अलग-अलग निर्माण हैं। पूर्व कमांड प्रतिस्थापन है, बाद वाला पैरामीटर विस्तार है।