So erhalten Sie Zugriff auf Umgebungsvariablen aus der Ausgabedatei

So erhalten Sie Zugriff auf Umgebungsvariablen aus der Ausgabedatei

Ich möchte Variablen aus einem bestimmten Speicherort für die Ausgabedatei abrufen und die Eingabedatei im folgenden Format eingeben:

log1.txt format:
[v] Output Data
<Value>DIMM_A,4096,1600,Hynix,HMT351S6CFR8C-PB,0942E041,1206,01,Hynix,,</Value>

or log2.txt format:
[v] Output Data
<Value>DIMM_B,4096,1600,Hynix,HMT351S6CFR8C-PB,017E90AE,1205,01,Hynix,,</Value>
<Value>DIMM_A,4096,1600,Hynix,HMT351S6CFR8C-PB,012E908D,1205,01,Hynix,,</Value>

und wir möchten die Ausgabedatei im OUT.TXT-Format wie folgt erhalten:

if log1.txt format and then output file format:
SET DIMM1=DIMM_A,4096,1600,Hynix,HMT351S6CFR8C-PB,0942E041,1206,01,Hynix,,

if log2.txt format and then output file format:
SET DIMM2=DIMM_B,4096,1600,Hynix,HMT351S6CFR8C-PB,017E90AE,1205,01,Hynix,,
SET DIMM1=DIMM_A,4096,1600,Hynix,HMT351S6CFR8C-PB,012E908D,1205,01,Hynix,,

wem könntest du mir helfen? Danke!

Antwort1

Das Hauptproblem ist, dass wir nicht wissen, wie viele Zeilen Valuewir haben. Daher ist die Lösung etwas kompliziert:

sed -n '/^<Value/{s/^<[^>]*>/=/;s/<[^>]*>$//;p}' log1.txt | sort | cat -n |\
sed 's/^\s\+\([0-9]*\)\s\+=/SET DIMM\1=/'

wobei zuerst sednach Zeilen mit Wert gesucht und <>Tags entfernt werden. Danach sortwerden die Zeilen sortiert, cat -naufgezählt und zuletzt seddie Zeilennummer in verschoben DIMM-num-.

Damit awkkäme man der sedLösung schon ziemlich nahe:

awk -F'>' '/^<Value/{gsub ("<.*", "", $2);print $2}' log1.txt | sort |\
awk '{print "SET DIMM"NR"="$0}'

verwandte Informationen