
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 Value
wir 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 sed
nach Zeilen mit Wert gesucht und <>
Tags entfernt werden. Danach sort
werden die Zeilen sortiert, cat -n
aufgezählt und zuletzt sed
die Zeilennummer in verschoben DIMM-num-
.
Damit awk
käme man der sed
Lösung schon ziemlich nahe:
awk -F'>' '/^<Value/{gsub ("<.*", "", $2);print $2}' log1.txt | sort |\
awk '{print "SET DIMM"NR"="$0}'