यह robhruska के स्क्रिप्ट थोड़ा साफ किया जाता है:
tail -n +2 file.txt | split -l 4 - split_
for file in split_*
do
head -n 1 file.txt > tmp_file
cat $file >> tmp_file
mv -f tmp_file $file
done
मैं wc
, cut
, ls
और स्थानों पर जहां वे अनावश्यक हैं में echo
हटा दिया। मैंने कुछ फाइलनामों को थोड़ा और सार्थक बनाने के लिए बदल दिया। मैंने इसे पढ़ने के लिए आसान बनाने के लिए केवल कई लाइनों पर तोड़ दिया।
यदि आप फैंसी प्राप्त करना चाहते हैं, तो आप हार्ड कोड किए गए एक का उपयोग करने के बजाय अस्थायी फ़ाइल नाम बनाने के लिए mktemp
या tempfile
का उपयोग कर सकते हैं।
संपादित
जीएनयू split
का उपयोग करते हुए यह यह करने के लिए संभव है:
split_filter() { { head -n 1 file.txt; cat; } > "$FILE"; }; export -f split_filter; tail -n +2 file.txt | split --lines=4 --filter=split_filter - split_
पठनीयता के लिए बाहर टूटी:
split_filter() { { head -n 1 file.txt; cat; } > "$FILE"; }
export -f split_filter
tail -n +2 file.txt | split --lines=4 --filter=split_filter - split_
जब --filter
निर्दिष्ट किया जाता है, split
आदेश रन (एक प्रत्येक आउटपुट फ़ाइल के लिए इस मामले में फ़ंक्शन, जिसे निर्यात किया जाना चाहिए) v सेट करता है आवेदक FILE
, कमांड के पर्यावरण में, फ़ाइल नाम पर।
एक फ़िल्टर स्क्रिप्ट या फ़ंक्शन आउटपुट सामग्री या यहां तक कि फ़ाइल नाम के लिए इच्छित किसी भी मैनिपुलेशन को कर सकता है। उत्तरार्द्ध का एक उदाहरण एक चर निर्देशिका में एक निश्चित फ़ाइल नाम में आउटपुट हो सकता है: उदाहरण के लिए > "$FILE/data.dat"
।
स्रोत
2009-09-11 16:47:45
ऐसा नहीं है कि किसी को उस जोड़ना चाहिए एक अंतर्निहित की सुविधा 'split' के रूप में उचित लगता है है ना? –
शायद यह सबसे बड़ा कारक * * बनने के खिलाफ * यह है कि आप आम तौर पर 'बिल्ली ए बी सी> पुनर्निर्मित' करके एक विभाजित फ़ाइल का पुनर्निर्माण करते हैं। फ़ाइल में अतिरिक्त रेखाओं का मतलब है कि सामान्य पुनर्निर्माण दृष्टिकोण मूल फ़ाइल को पुन: पेश नहीं करता है। –
आगामी (* नहीं *) "' unsplit --remove-header' "उपयोगिता यही है! लेकिन गंभीरता से, 'विभाजित', यदि यह "दोहराव-हेडर" विकल्प था, तो अभी भी अपने वर्तमान व्यवहार के लिए डिफ़ॉल्ट होना चाहिए। यदि आप वास्तव में चाहते थे तो आप केवल हेडर सामान का उपयोग करेंगे। –