2017-03-15 20 views
5

पर मौजूद फ़ाइल में किसी अन्य टेक्स्ट के साथ टेक्स्ट को कैसे प्रतिस्थापित करें मेरे पास यूनिक्स फ़ाइल सिस्टम में file.txt है। इसकी सामग्री है नीचे:एचडीएफएस

[ 
{abc}]}, 
{pqr}]} 
] 

मैं खोल स्क्रिप्ट नीचे का उपयोग कर ऐसा करने के लिए कर रहा हूँ:

sed -i 's/}]}/}]},/g' file.txt 
sed -i '1i [' file.txt 
sed -i '$ s/}]},/}]}]/g' file.txt 

मेरा प्रश्न है

{abc}]} 
{pqr}]} 

मैं में इस file.txt कनवर्ट करना चाहते हैं क्या होगा यदि यह फ़ाइल एचडीएफएस पर/परीक्षण स्थान पर मौजूद थी।

अगर मैं का उपयोग करें: sed -i 's/}]}/}]},/g' /test/file.txt

यह यूनिक्स विभाजन/परीक्षण पर देखते हैं और कहते फ़ाइल मौजूद नहीं है जाएगा।

अगर मैं का उपयोग करें: sed -i 's/}]}/}]},/g' | hadoop fs -cat /test/file.txt

इसे कहते हैं ----- sed: कोई इनपुट फ़ाइलों और फिर बिल्ली आदेश के अनुसार file.txt की सामग्री के मुद्रण करता है।

अगर मैं का उपयोग hadoop fs -cat /test/file.txt | sed -i 's/}]}/}]},/g'

इसे कहते हैं ---- sed: कोई इनपुट फ़ाइलें बिल्ली: उत्पादन स्ट्रीम में लिखें करने के लिए

तो असमर्थ है, मैं कैसे कुछ के साथ HDFS में मेरी फ़ाइल से तार का स्थान ले लेंगे अन्य स्ट्रिंग?

उत्तर

5
sed साथ

और hdfs कमांड:

hdfs dfs -cat /test/file.txt | sed 's/$/,/g; $s/,$/\n]/; 1i [' | hadoop fs -put -f - /test/file.txt 

जहां,

hdfs dfs -cat /test/file.txt प्रत्येक पंक्ति के अंत में एक अल्पविराम जोड़ने के लिए HDFS फ़ाइल सामग्री

s/$/,/g; है प्राप्त करने के लिए है

$s/,$/\n]/; लाइन पर अल्पविराम को हटाने और एक नई लाइन जोड़ने के लिए है एक ब्रैकेट के साथ

1i [ पहली पंक्ति

hadoop fs -put -f - /test/file.txt HDFS में मूल फ़ाइल को अधिलेखित करने के लिए है

+0

लाइन का यह टुकड़ा मुझे घंटे का एक बहुत बचाया पर एक ब्रैकेट जोड़ने .. चियर्स के लिए है – salmanbw

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