2016-04-25 10 views
2

Wir haben zwei Dateien file1.txt und file2.txt in DateiHinzufügen von Kommentaren

file1.txt

PropertyA 
PropertyB 
PropertyC 
####Some Comments## 
PropertyA 
PropertyB 
PropertyC 
PropertyD 

file2.txt

#This is Property A 
PropertyA=valueforpropertyA 

PropertyB=valueforpropertyB 
#Adding values to Property C 
PropertyC=valueforpropertyC 
#Value for Property D 
PropertyD=valueforpropertyD 
#This is Property E 
PropertyE=valueforpropertyE 

PropertyF=valueforpropertyF 
#End of Properties 
#End of values 
#End of Files 

den folgenden Befehl verwenden wir zum Schreiben Die Werte für file1.txt aus file2.txt nach den Eigenschaften, die im Abschnitt #### Some Comments ## von file1.txt angezeigt werden.

awk -F'=' 'FNR==NR{if (p) a[$0]; else {print; if ($0 ~ /####Some Comments##/) p=1} next} 
    $1 in a' file1.txt file2.txt > _file1.txt && mv _file1.txt file1.txt 

Dies ist die Ausgabe:

PropertyA 
PropertyB 
PropertyC 
####Some Comments## 
PropertyA=valueforpropertyA 
PropertyB=valueforpropertyB 
PropertyC=valueforpropertyC 
PropertyD=valueforpropertyD 

Wir den obigen Befehl müssen aus den Kommentaren drucken, die auch in file2.txt erscheinen werden. Dies sollte die Ausgabe von file1.txt

*PropertyA 
PropertyB 
PropertyC 
####Some Comments## 
#This is Property A 
PropertyA=valueforpropertyA 
PropertyB=valueforpropertyB 
#Adding values to Property C 
PropertyC=valueforpropertyC 
#Value for Property D 
PropertyD=valueforpropertyD 
#End of Properties 
#End of values 
#End of Files* 

sein Wie kann dies mit dem obigen Befehl getan werden?

+0

Einige verschleierten awk Code. – SaintHax

Antwort

0
awk -F'=' 'FNR==NR{if (p) a[$0]; else {print; if ($0 ~ /####Some Comments##/) p=1} next} { if($1 in a) { print a[$1] } else if ($1 ~ /^#/){ print }}' file1.txt file2.txt > _file1.txt && mv _file1.txt file1.txt 

Try this ....

habe ich nur noch eine zusätzliche Klammer, die die Linie, ob der a-Array druckt enthält $ 1 ist oder nicht (wenn nicht, es ist ein Kommentar)

+0

Hallo Joda, Danke für Ihre Antwort, Ich habe Ihr Kommando versucht. Unerwarteter Zeilenumbruch oder Ende des Strings erhalten jedoch Fehlermeldung // {print} // awk: cmd. Zeile: 1: FNR == NR {if (p) a [$ 0]; sonst {drucken; if ($ 0 ~/#### Einige Kommentare ## /) p = 1} next} {if ($ 1 in a) {drucke ein [$ 1]} else if ($ 1 ~/^ # /) {print} awk : cmd. Zeile: 1:^unerwarteter Zeilenumbruch oder Ende der Zeichenfolge – Rashid

+0

Thiis ist mein Befehl: awk -F '=' 'FNR == NR {if (p) a [$ 0]; sonst {drucken; if ($ 0 ~/#### Einige Kommentare ## /) p = 1} next} {if ($ 1 in a) {drucke ein [$ 1]} else if ($ 1 ~/^ # /) {print} 'file1 .txt datei2.txt> _datei1.txt && mv _datei1.txt datei1.txt. Wie kann ich dieses Problem beheben? – Rashid

+0

Ups, am Ende habe ich ein "}" verpasst :) Ich habe meine Antwort bearbeitet – Joda

Verwandte Themen