2013-08-05 4 views
9

मेरे पास एक स्रोत फ़ाइल है जो एकाधिक फ़ाइलों का संयोजन है जो एक साथ विलय कर दी गई हैं। मेरी लिपि उन्हें मूल व्यक्तिगत फाइलों में अलग करना है।मैं शैल स्क्रिप्ट पर गूंज के साथ अग्रणी सफेद जगहों को कैसे संरक्षित करूं?

जब भी मुझे "FILENM" से शुरू होने वाली रेखा का सामना करना पड़ता है, जिसका अर्थ है कि यह अगली फ़ाइल की शुरुआत है।

फ़ाइलों में सभी विस्तार रेखाएं निश्चित चौड़ाई हैं; इसलिए, मुझे वर्तमान में एक समस्या का सामना करना पड़ रहा है जहां एक लंबी रेखा के साथ शुरू होने वाली रेखा को छोटा कर दिया जाता है जब इसे छोटा नहीं किया जाता है।

मैं अग्रणी स्टेपस्पेस को बनाए रखने के लिए इस स्क्रिप्ट को कैसे बढ़ा सकता हूं?

while read line   
do   
    lineType=`echo $line | cut -c1-6` 
    if [ "$lineType" == "FILENM" ]; then 
     fileName=`echo $line | cut -c7-` 
    else 
     echo "$line" >> $filePath/$fileName 
    fi 
done <$filePath/sourcefile 

उत्तर

18

प्रमुख रिक्त स्थान हटा दिए गए हैं क्योंकि read शब्दों में इनपुट को विभाजित करता है। इसका मुकाबला करने के लिए, IFS वैरिएबल को खाली स्ट्रिंग पर सेट करें। इस तरह:

while IFS= read line 
do 
    . . . 
done < file 

भी संरक्षित करने के लिए बैकस्लैश read -r विकल्प का उपयोग:

OLD_IFS="$IFS" 
IFS= 
while read line   
do 
    ... 
done <$filePath/sourcefile 
IFS="$OLD_IFS" 
7

IFS चर आप निम्नलिखित तरीके से while लिख सकता है बनाए रखने के लिए।

+0

इसके लिए आप एक ऑस्कर के लायक हैं। – xdevs23

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