
Я хочу получить переменные из определенного местоположения выходного файла и формата входного файла, как показано ниже:
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>
и мы хотим получить выходной формат файла OUT.TXT, как показано ниже:
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,,
кому вы могли бы мне помочь? спасибо!
решение1
Основная проблема в том, что мы не знаем, сколько у Value
нас строк. Поэтому решение немного усложняется:
sed -n '/^<Value/{s/^<[^>]*>/=/;s/<[^>]*>$//;p}' log1.txt | sort | cat -n |\
sed 's/^\s\+\([0-9]*\)\s\+=/SET DIMM\1=/'
где первый sed
greps строки со значением и удаляет <>
теги. После этого sort
сортирует строки, cat -n
перечисляет их и последний sed
перемещает номер строки в DIMM-num-
.
С awk
этим было бы довольно близко к sed
решению:
awk -F'>' '/^<Value/{gsub ("<.*", "", $2);print $2}' log1.txt | sort |\
awk '{print "SET DIMM"NR"="$0}'