Linux csplit कमांड गाइड: पैटर्न से फ़ाइलें बांटें

csplit कमांड क्या है और इसकी आवश्यकता क्यों पड़ती है?

सिस्टम एडमिनिस्ट्रेशन और DevOps वर्कफ़्लो में भारी-भरकम लॉग फाइलों या विस्तृत डेटासेट को प्रोसेस करना एक दैनिक चुनौती है। साधारण split टूल केवल बाइट्स या पंक्तियों की निश्चित संख्या के अनुसार डेटा को टुकड़ों में बांटता है, जबकि csplit (Context Split) फाइल की आंतरिक सामग्री, रेगेक्स (Regex) पैटर्न या विशिष्ट संदर्भ के आधार पर लक्षित विभाजन करने की अद्भुत क्षमता प्रदान करता है। इस ट्यूटोरियल में हम व्यावहारिक उदाहरणों द्वारा इसके दक्ष उपयोग को समझेंगे।

लाइन नंबर के आधार पर फ़ाइल को अलग-अलग भागों में विभाजित करना

अभ्यास वातावरण तैयार करने के उद्देश्य से एक पृथक डायरेक्टरी निर्मित करके उसमें प्रवेश करने हेतु mkdir -p ~/csplit_lab && cd ~/csplit_lab कमांड निष्पादित करें।

mkdir -p ~/csplit_lab && cd ~/csplit_lab

विभाजन प्रक्रिया का परीक्षण करने के लिए पंद्रह पंक्तियों वाली एक डमी स्थिति रिपोर्ट फ़ाइल तैयार करने हेतु seq -f "Line %g: System status normal" 1 15 > server_status.txt चलाएं।

seq -f “Line %g: System status normal” 1 15 > server_status.txt

डॉक्यूमेंट की संरचना जांचने के लिए आरंभिक पाँच पंक्तियों को head -n 5 server_status.txt के ज़रिए टर्मिनल पर देखें।

head -n 5 server_status.txt

csplit उपयोगिता निर्दिष्ट पंक्ति सीमाओं अथवा पैटर्न के आधार पर पाठ्य सामग्री को कई खंडों में बांट देती है।
उदाहरण के लिए, csplit server_status.txt 6 11 कमांड 6वीं और 11वीं पंक्ति को सीमा-चिह्न मानते हुए मूल डेटा को तीन स्वतंत्र फाइलों (क्रमशः पंक्ति 1-5, 6-10, तथा 11-15) में विभाजित करता है।
कमांड निष्पादन के उपरांत कंसोल पर प्रदर्शित होने वाली संख्याएं प्रत्येक नव-निर्मित फ़ाइल के बाइट (Byte) आकार को इंगित करती हैं।
⚙️ [प्रमुख विकल्प एवं पैरामीटर्स]

-f PREFIX : आउटपुट फाइलों के डिफ़ॉल्ट प्रीफ़िक्स (xx) के स्थान पर कस्टम उपसर्ग सेट करता है।
-b FORMAT : printf शैली का उपयोग करके फ़ाइल प्रत्यय (सफ़िक्स) के संख्यात्मक प्रारूप को अनुकूलित करता है।
-n DIGITS : आउटपुट फ़ाइल नाम के संख्यात्मक इंडेक्स में अंकों की संख्या तय करता है (डिफ़ॉल्ट मान: 2)।
-s : साइलेंट मोड सक्रिय करता है, जिससे जनरेटेड फाइलों के बाइट आकार कंसोल पर प्रदर्शित नहीं होते।
-z : शून्य बाइट (0-byte) वाली रिक्त आउटपुट फाइलों के निर्माण को रोकता है।
-k : निष्पादन के दौरान कोई त्रुटि आने पर भी पहले से तैयार हो चुकी वैध फाइलों को डिलीट होने से बचाता है।

csplit server_status.txt 6 11

विभाजन के उपरांत उत्पन्न परिणामी फाइलों की पुष्टि करने के लिए ls -l xx* निष्पादित करें।
आउटपुट दर्शाता है कि सिस्टम ने डिफ़ॉल्ट नामकरण योजना का अनुसरण करते हुए xx00, xx01, तथा xx02 नामक तीन फ़ाइलें निर्धारित बाइट आकार के साथ सफलता से उत्पन्न कर दी हैं।

ls -l xx*

रेगुलर एक्सप्रेशन (Regex) पैटर्न द्वारा अनुभाग-वार स्वचालित फ़ाइल विभाजन

बहु-स्तरीय हेडर और सेक्शन वाली रिपोर्ट का अनुकरण करने हेतु निम्नलिखित ब्लॉक चलाकर reports.txt नामक दस्तावेज़ तैयार करने के लिए cat << 'EOF' > reports.txt कमांड निष्पादित करें।

cat « ‘EOF’ > reports.txt
SECTION_A
CPU utilization: 32%
Memory utilization: 55%
SECTION_B
Disk space free: 120GB
Inode usage: 40%
SECTION_C
Network in: 1.2Gbps
Network out: 850Mbps
EOF

निर्मित फ़ाइल के आंतरिक विन्यास और प्रविष्टियों की समीक्षा हेतु cat reports.txt चलाएं।
SECTION_A, SECTION_B, एवं SECTION_C के तहत सिस्टम मेट्रिक्स सुव्यवस्थित ढंग से दर्ज हो चुके हैं।

cat reports.txt

csplit reports.txt '/SECTION_/' '{*}' कमांड फ़ाइल में जब भी /SECTION_/ स्ट्रिंग का मिलान होता है, वहां से एक नया पार्ट बनाना शुरू करता है। यहाँ प्रयुक्त { * } पुनरावृत्ति ऑपरेटर टूल को निर्देश देता है कि वह दस्तावेज़ के अंत तक सभी मिलान बिंदुओं पर यह विभाजन लागू रखे।
टर्मिनल पर आने वाले आंकड़े पहले पैटर्न से पूर्व की रिक्त सामग्री (0 बाइट) सहित प्रत्येक सेक्शन ब्लॉक के बाइट आकार को क्रमबद्ध रूप से दर्शाते हैं।

csplit reports.txt ‘/SECTION_/’ ‘{*}’

अलग-अलग टुकड़ों में विभाजित डेटा का निरीक्षण करने के लिए head -n 20 xx* निष्पादित करें।
प्रारंभिक मैच से पहले की रिक्त प्रविष्टि xx00 में स्थित है, जबकि तीनों सेक्शन क्रमशः xx01, xx02, और xx03 में पृथक रूप से सुरक्षित हो चुके हैं।

head -n 20 xx*

आउटपुट फ़ाइल नाम के उपसर्ग (Prefix) और संख्यात्मक प्रारूप को अनुकूलित करना

कस्टम नामकरण नियमों के अभ्यास के लिए त्रुटि और चेतावनी संदेशों से युक्त एक लॉग फ़ाइल तैयार करने हेतु cat << 'EOF' > app.log चलाएं।

cat « ‘EOF’ > app.log
[ERROR] 2026-10-25 DB connection timeout
[INFO] Retrying connection attempt 1
[ERROR] 2026-10-25 Authentication failure
[WARN] High memory consumption detected
[ERROR] 2026-10-25 Redis cache cluster down
EOF

csplit -f log_part_ -n 3 app.log '/\[ERROR\]/' '{*}' कमांड प्रत्येक [ERROR] प्रविष्टि मिलने पर नई फ़ाइल बनाता है। इसमें -f log_part_ फ्लैग द्वारा आउटपुट फ़ाइलों का उपसर्ग log_part_ तय किया गया है और -n 3 पैरामीटर प्रत्यय संख्या को तीन अंकों के फ़ॉर्मेट में व्यवस्थित करता है।
कंसोल पर प्रदर्शित आउटपुट प्रत्येक फ़ाइल के सटीक बाइट वॉल्यूम को व्यक्त करता है।

csplit -f log_part_ -n 3 app.log ‘/[ERROR]/’ ‘{*}’

निर्देशित फ़ॉर्मेटिंग लागू होने की पुष्टि हेतु डायरेक्टरी सूची जांचने के लिए ls -l log_part_* चलाएं।
डिफ़ॉल्ट xx के बजाय निर्दिष्ट प्रीफ़िक्स और 3-अंकीय नंबरिंग के साथ log_part_000 से लेकर log_part_003 तक की फ़ाइलें व्यवस्थित रूप से उत्पन्न हो चुकी हैं।

ls -l log_part_*

प्रोडक्शन उपयोग के लिए आवश्यक फ़्लैग: रिक्त फ़ाइलें हटाना (-z) और त्रुटि सुरक्षा (-k)

csplit -z -k -f clean_part_ reports.txt '/SECTION_/' '{*}' कमांड दो अत्यंत महत्वपूर्ण प्रोडक्शन फ़्लैग्स का संयोजन करता है: -z शून्य बाइट वाली खाली फाइलों को बनने से रोकता है, जबकि -k अप्रत्याशित विफलता की स्थिति में भी निर्मित फाइलों को मिटने से बचाता है।
यहाँ पहले पैटर्न से पूर्व उत्पन्न होने वाली अनावश्यक खाली फ़ाइल स्वतः निरस्त हो जाती है, जिससे स्क्रीन पर केवल वास्तविक डेटा वाले तीन खंडों के आकार (55, 50, और 51 बाइट्स) ही रिपोर्ट होते हैं।

csplit -z -k -f clean_part_ reports.txt ‘/SECTION_/’ ‘{*}’

परिणामी फाइलों के आकार की समीक्षा के लिए ls -l clean_part_* चलाएं।
-z विकल्प की कार्यप्रणाली के कारण इस बार व्यर्थ 0-बाइट फ़ाइल नहीं बनी है, और केवल आवश्यक डेटा से समृद्ध clean_part_00 से clean_part_02 तक कुल तीन फ़ाइलें ही डायरेक्टरी में मौजूद हैं।

ls -l clean_part_*

पहले विभाजन खंड की सामग्री सत्यापित करने के लिए cat clean_part_00 निष्पादित करें।
किसी भी अतिरिक्त शून्य-बाइट ऑफसेट के बिना, clean_part_00 सीधे SECTION_A के डेटा से ही आरंभ होता है और पूरी जानकारी अक्षुण्ण रखता है।

cat clean_part_00

ट्यूटोरियल के दौरान निर्मित सभी अस्थायी टेस्ट फ़ाइलों और कार्यशाला डायरेक्टरी को हटाने हेतु rm -rf ~/csplit_lab चलाएं।

rm -rf ~/csplit_lab

इस प्रकार लिनक्स सिस्टम में csplit कमांड का उपयोग करके विशिष्ट पैटर्नों और रेगेक्स सीमाओं के आधार पर टेक्स्ट फाइलों को सटीकता से विभाजित किया जा सकता है। साधारण आकार-आधारित विभाजन से कहीं आगे बढ़कर, बड़े आकार के सिस्टम लॉग विश्लेषण, स्वचालित रिपोर्ट पार्सिंग और डेटा इंजीनियरिंग पाइपलाइनों में csplit एक अत्यंत शक्तिशाली उपकरण सिद्ध होता है।