2009-09-14 7 views
37

एक लिनक्स डेस्कटॉप (RHEL4) पर मैं एक बड़ी फ़ाइल (> 1 गीग) के भीतर बाइट्स (आमतौर पर 1000 से कम) को निकालना चाहता हूं। मैं फ़ाइल में ऑफसेट और खंड के आकार को जानता हूं।मैं फ़ाइल के भीतर से बाइट्स का एक हिस्सा कैसे निकालूं?

मैं ऐसा करने के लिए कोड लिख सकता हूं लेकिन क्या कमांड लाइन समाधान है?

आदर्श रूप में, कुछ की तरह:

magicprogram --offset 102567 --size 253 <input.binary> output.binary 

उत्तर

62

dd का प्रयास करें:

dd skip=102567 count=253 if=input.binary of=output.binary bs=1 
+0

धन्यवाद। वास्तव में मैं क्या चाहता था। – DanM

+2

वैकल्पिक रूप से stderr को आउटपुट को दबाने के लिए 'स्थिति = none' जोड़ें। – kenorb

+4

हेक्स ऑफसेट्स का उपयोग करके उदाहरण यहां दिया गया है: 'dd if = in.bin bs = 1 status = none skip = $ ((0x88)) = = (0x80)) = out.bin' का गिनती = $ ((0x80))। – kenorb

3

dd कमांड यह सब कर सकते हैं। कॉल के हिस्से के रूप में तलाशें और/या पैरामीटर को छोड़ दें।

10

यह एक पुरानी सवाल है, लेकिन मैं dd आदेश का एक और संस्करण है कि है बाइट्स की बड़े हिस्से के लिए बेहतर अनुकूल जोड़ना चाहते हैं:

dd if=input.binary of=output.binary skip=$offset count=$bytes iflag=skip_bytes,count_bytes 

जहां $offset और $bytes बाइट इकाइयों में नंबर दिए गए हैं ।

थॉमस के स्वीकृत उत्तर के साथ अंतर यह है कि bs=1 यहां दिखाई नहीं देता है। bs=1 इनपुट और आउटपुट ब्लॉक आकार को 1 बाइट होने का उत्पादन करता है, जो बाइट्स को निकालने के लिए बड़ी संख्या में धीमा हो जाता है।

1

head + tail

सुनिश्चित नहीं हैं कि यह दक्षता में dd की तुलना, लेकिन यह मजेदार है:

printf "123456789" | tail -c+2 | head -c3 

की पसंद 3 बाइट्स, 2 एक पर शुरू:

234 

यह भी देखें: https://stackoverflow.com/a/1272995/895245

संबंधित मुद्दे