【问题标题】:How to replace a text with another text in a file present at HDFS如何用 HDFS 中存在的文件中的另一个文本替换文本
【发布时间】:2017-03-16 17:38:33
【问题描述】:

我在 UNIX 文件系统中有 file.txt。其内容如下:

{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 的 /test 位置怎么办。

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

它会查看 unix 分区 /test 并说文件不存在。

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

它说 ----- sed: no input files 然后按照 cat 命令打印 file.txt 的内容。

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

它说---- sed:没有输入文件 cat:无法写入输出流

那么,我应该如何将 HDFS 文件中的字符串替换为其他字符串?

【问题讨论】:

    标签: sed hdfs


    【解决方案1】:

    使用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中的原始文件

    【讨论】:

      猜你喜欢
      • 2018-03-29
      • 2021-09-18
      • 2020-01-09
      • 2019-03-06
      • 2018-12-27
      • 2014-03-05
      • 1970-01-01
      • 2015-02-25
      • 2013-05-19
      相关资源
      最近更新 更多