입력 XML 파일:
<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<Dcn xmlns="http://schemas.test.com/2013/ClaimRequest" xsi:schemaLocation="http://schemas.test.com/2013/ClaimRequest gdhjf/profiles/Redirect/dhd/Desktop/dhd_Prof.XSD" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Header sendingSystemId="XYC" receivingSystemId="ABC" version="2.0" createDateTime="2019-01-19T04:27:15" batchingControlNumber="AZ042018" transType="ClaimRequest" dcn="1901959351"/>
<Body>
<ClaimRequest>
<Claims>
<ProfessionalClaim paymentIndicator="P" claimProcessedDateTime="20180409120000102" claimEndDate="2018-04-02" claimStartDate="2018-04-02" sourceSystemId="abcd" claimActionCode="00">
<PayToProvider id="54321"/>
<Patient eligSysId="dhhgs1" clientId="VBV"/>
<ClaimLines>
<ClaimLine sourceSystemClaimLineNumber="1" />
<ClaimLine sourceSystemClaimLineNumber="2" />
<ClaimLine sourceSystemClaimLineNumber="3" />
</ClaimLines>
<ClaimTrailer claimDetailLineCount="3"/>
</ProfessionalClaim>
<ProfessionalClaim paymentIndicator="P" claimProcessedDateTime="20180430120000277" claimEndDate="2018-04-12" claimStartDate="2018-04-12" sourceSystemId="abcd" claimActionCode="00">
<PayToProvider id="54673"/>
<Patient eligSysId="dhhgs1" clientId="VBV"/>
<ClaimLines>
<ClaimLine sourceSystemClaimLineNumber="1" />
</ClaimLines>
<ClaimTrailer claimDetailLineCount="1"/>
</ProfessionalClaim>
<ProfessionalClaim paymentIndicator="P" claimProcessedDateTime="20180430120000279" claimEndDate="2018-04-17" claimStartDate="2018-04-17" sourceSystemId="abcd" claimActionCode="00">
<PayToProvider id="676543"/>
<Patient lastName="CLARK" memberId="U1672936601" firstName="DANIEL" eligSysId="CNCIEDW1" clientId="CNC"/>
<ClaimLines>
<ClaimLine sourceSystemClaimLineNumber="1" />
<ClaimLine sourceSystemClaimLineNumber="2" />
</ClaimLines>
<ClaimTrailer claimDetailLineCount="2"/>
</ProfessionalClaim>
<ProfessionalClaim paymentIndicator="P" claimProcessedDateTime="20180430120000281" claimEndDate="2018-04-17" claimStartDate="2018-04-17" sourceSystemId="abcd" claimActionCode="00">
<PayToProvider id="653473"/>
<Patient lastName="VAUGHN" memberId="U1677077501" firstName="KAREN" eligSysId="CNCIEDW1" clientId="CNC"/>
<ClaimLines>
<ClaimLine sourceSystemClaimLineNumber="1"/>
<ClaimLine sourceSystemClaimLineNumber="2"/>
</ClaimLines>
<ClaimTrailer claimDetailLineCount="2"/>
</ProfessionalClaim>
</Claims>
<IcnCount total="4"/>
</ClaimRequest>
</Body>
</Dcn>
이 XML 파일의 헤더 태그 앞에 주석 태그를 추가하고 다음 세부 정보를 채워야 합니다.
<!-- Claims Paid_Start_Date="2018-04-02" Paid_End_Date="2018-04-17" Process_Start_Date="20180409" Process_End_Date="201804301" -->
여기,
- Claim_Start_Date= 파일에 있는 ClaimStartDate의 최소값입니다.
- Claim_End_Date= 파일 내 ClaimEndDate의 최대값
- Process_Start_Date= 파일의 첫 번째 청구processedDateTime
- Process_End_Date= 파일의 마지막 청구ProcessedDateTime
지금까지 내가 한 일은 다음과 같습니다.
F_LINE=awk '/<professionalclaim/' test.xml | head -1
L_LINE=awk '/<professionalclaim/' test.xml | tail -1
이제 이 두 행에서 필요한 값을 추출하여 주석 태그에 채워야 합니다.
답변1
XML 파서를 사용하면 이렇게 필요한 구성요소를 한 번에 하나씩 추출할 수 있습니다. 귀하의 파일은 x.xml
.
# Parse the XML file for the relevant entries
#
minClaimStartDate=$(xmlstarlet sel -t -v '//_:ProfessionalClaim/@claimStartDate' -n x.xml | sort -V | head -n1)
maxClaimEndDate=$(xmlstarlet sel -t -v '//_:ProfessionalClaim/@claimStartDate' -n x.xml | sort -V | tail -n1)
...
# Grab the XML declaration header
#
header=$(head -n1 x.xml) # Ugh, I can't find a way to do this properly
그러면 조각들을 이렇게 다시 합칠 수 있어요
# Output composite
#
echo "$header"
echo "<!-- Claims Paid_Start_Date="$minClaimStartDate" Paid_End_Date="$maxClaimEndDate" ... -->"
xmlstarlet fo --omit-decl x.xml