出力ファイルから環境変数にアクセスする方法

出力ファイルから環境変数にアクセスする方法

出力ファイルの特定の場所から変数を取得し、入力ファイルの形式を以下のようにします。

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=/'

ここで、最初の はsedValue で行を grep し、<>タグを削除します。その後、sortは行をソートし、cat -nは行を列挙し、最後にsedは行番号を に移動しますDIMM-num-

そうすれば、解決awkにかなり近づくでしょうsed:

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

関連情報