Как заменить текст другим текстом в файле, присутствующем в HDFS

у меня есть файл.txt в файловой системе UNIX. Его содержание ниже:

{abc}]}
{pqr}]}

Я хочу преобразовать этот файл.txt в:

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

Я могу сделать это, используя сценарий оболочки ниже:

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

мой вопрос в том, что, если бы этот файл присутствовал на HDFS в /test location.

если я использую : sed -i 's/}]}/}]},/g' /test/file.txt

он будет смотреть на раздел /тест unix и говорить, что файл не существует.

если я использую : sed -i 's/}]}/}]},/g' | hadoop fs -cat /test/file.txt

он говорит ----- sed: нет входных файлов, а затем печатает содержимое файла.txt согласно команде cat.

если я использую hadoop fs -cat /test/file.txt | sed -i 's/}]}/}]},/g'

он говорит - - - - sed: нет входных файлов cat: невозможно записать в выходной поток

Итак, как мне заменить строки из моего файла в HDFS какой-либо другой строкой?

1 ответов


С 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