Как заменить текст другим текстом в файле, присутствующем в 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