2017-03-15 80 views
5

我在UNIX文件系統中有file.txt。其含量低於:如何用存在於HDFS的文件中的另一文本替換文本

{abc}]} 
{pqr}]} 

我想這個file.txt的轉換爲:

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

我能夠做到這一點使用下面的shell腳本:

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

我的問題是如果此文件出現在HDFS /測試位置,該怎麼辦?

如果我使用:sed -i 's/}]}/}]},/g' /test/file.txt

它看起來在UNIX分區/測試,說文件不存在。

如果我使用:sed -i 's/}]}/}]},/g' | hadoop fs -cat /test/file.txt

它說----- sed的:沒有輸入文件,然後打印file.txt的內容按cat命令。

如果我使用hadoop fs -cat /test/file.txt | sed -i 's/}]}/}]},/g'

它說---- sed的:沒有輸入文件 貓:無法寫入到輸出流

那麼,如何將我在HDFS與一些替換字符串從我的文件其他字符串?

回答

5

隨着sedhdfs命令:

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

相關問題