출력 파일에서 환경 변수에 액세스하는 방법

출력 파일에서 환경 변수에 액세스하는 방법

출력 파일 특정 위치에서 변수를 가져오고 아래와 같이 입력 파일 형식을 얻고 싶습니다.

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로 줄을 파악하고 <>태그를 제거합니다. 그런 다음 sort줄을 정렬하고 cat -n열거하고 마지막으로 sed줄 번호를 로 이동합니다 DIMM-num-.

이를 사용하면 솔루션 awk에 매우 가깝습니다 .sed

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

관련 정보