2017-03-15 4 views
5

Ich habe file.txt in UNIX-Dateisystem. Sein Inhalt ist unter:Wie ersetze ich einen Text durch einen anderen Text in einer Datei bei HDFS

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

ich in der Lage bin dies unter Shell-Skript zu tun mit:

{abc}]} 
{pqr}]} 

ich diesen datei.txt in konvertieren möchten

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

Meine Frage ist, Was wäre, wenn diese Datei auf HDFS unter/test location vorhanden wäre?

Wenn ich benutze: sed -i 's/}]}/}]},/g' /test/file.txt

Es befindet sich auf Unix-Partition/Test aussehen würde und sagen Datei nicht existiert.

Wenn ich benutze: sed -i 's/}]}/}]},/g' | hadoop fs -cat /test/file.txt

Es sagt ----- sed: keine Eingabedateien und druckt dann Inhalt von datei.txt wie pro Befehl cat.

Wenn ich hadoop fs -cat /test/file.txt | sed -i 's/}]}/}]},/g'

Es sagt ---- sed: keine Eingabedateien Katze: Kann nicht Ausgabestrom

So schreiben, wie soll ich mit einigen Strings aus meiner Datei auf HDFS ersetzen andere Schnur?

Antwort

5

Mit sed und hdfs Befehle:

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

wo

hdfs dfs -cat /test/file.txt ist für das Erhalten der HDFS Dateiinhalt

s/$/,/g; jeder Zeile am Ende für das Hinzufügen eines Komma ist

$s/,$/\n]/; ist zum Entfernen von Komma an der Linie und Hinzufügen einer neuen Zeile mit einem Bügel

1i [ ist eine Halterung in der ersten Zeile für das Hinzufügen von

hadoop fs -put -f - /test/file.txt die Original-Datei zum Überschreiben in HDFS ist

+0

Dieses Stück Linie mir viele Stunden gespeichert .. cheers – salmanbw

Verwandte Themen