리눅스 서버 사용
다음 데이터를 생성하는 URL이 있습니다.
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="/seriessnapshot.xsl"?>
<timeSeries>
<series parentPath="uat.fft.client.CB1201C.AP714628.fusion.ebond-fusion-nucleus-app.ebond-fusion-order-app" id="OpenFin Memory(MB)" latestItemTimestamp="1588874010094" datetime="2020/05/07 19:53:30" latestItemValue="101"/>
<series parentPath="uat.fft.client.CB1201C.AP714628.fusion.ebond-fusion-nucleus-app.ebond-fusion-rfq-credit" id="OpenFin Memory(MB)" latestItemTimestamp="1588874010094" datetime="2020/05/07 19:53:30" latestItemValue="101"/>
<series parentPath="uat.fft.client.CB1201C.AP714628.fusion.ebond-fusion-nucleus-app.ebond-fusion-risk-app" id="OpenFin Memory(MB)" latestItemTimestamp="1588874010094" datetime="2020/05/07 19:53:30" latestItemValue="96"/>
<series parentPath="uat.fft.client.CB3ERWE.AP717938.fusion.ebond-fusion-nucleus-app.ebond-fusion-order-app" id="OpenFin Memory(MB)" latestItemTimestamp="1588860133654" datetime="2020/05/07 16:02:13" latestItemValue="101"/>
<series parentPath="uat.fft.client.CB3ERWE.AP717938.fusion.ebond-fusion-nucleus-app.ebond-fusion-rfq-credit" id="OpenFin Memory(MB)" latestItemTimestamp="1588860133654" datetime="2020/05/07 16:02:13" latestItemValue="103"/>
<series parentPath="uat.fft.client.CB3ERWE.AP717938.fusion.ebond-fusion-nucleus-app.ebond-fusion-risk-app" id="OpenFin Memory(MB)" latestItemTimestamp="1588860133654" datetime="2020/05/07 16:02:13" latestItemValue="99"/>
<series parentPath="uat.fft.client.GA2ADAZ.AP718017.fusion.ebond-fusion-nucleus-app.ebond-fusion-rfq-credit" id="OpenFin Memory(MB)" latestItemTimestamp="1588874018986" datetime="2020/05/07 19:53:38" latestItemValue="107"/>
<series parentPath="uat.fft.client.GA2BASV.AP722002.fusion.ebond-fusion-nucleus-app.ebond-fusion-rfq-credit" id="OpenFin Memory(MB)" latestItemTimestamp="1588866113043" datetime="2020/05/07 17:41:53" latestItemValue="110"/>
<series parentPath="uat.fft.client.GA2BHUH.AP717267.fusion.ebond-fusion-nucleus-app.ebond-fusion-order-app" id="OpenFin Memory(MB)" latestItemTimestamp="1588864837395" datetime="2020/05/07 17:20:37" latestItemValue="102"/>
<series parentPath="uat.fft.client.GA2BHUH.AP717267.fusion.ebond-fusion-nucleus-app.ebond-fusion-rfq-credit" id="OpenFin Memory(MB)" latestItemTimestamp="1588864837395" datetime="2020/05/07 17:20:37" latestItemValue="126"/>
<series parentPath="uat.fft.client.GA2BHUH.AP717267.fusion.ebond-fusion-nucleus-app.ebond-fusion-risk-app" id="OpenFin Memory(MB)" latestItemTimestamp="1588864837395" datetime="2020/05/07 17:20:37" latestItemValue="114"/>
<series parentPath="uat.fft.client.GA2CRAD.AP718024.fusion.ebond-fusion-nucleus-app.ebond-fusion-rfq-sales" id="OpenFin Memory(MB)" latestItemTimestamp="1588862905103" datetime="2020/05/07 16:48:25" latestItemValue="102"/>
<series parentPath="uat.fft.client.GA2MRAH.AP711671.fusion.ebond-fusion-nucleus-app.ebond-fusion-quote-app" id="OpenFin Memory(MB)" latestItemTimestamp="1588867209058" datetime="2020/05/07 18:00:09" latestItemValue="103"/>
<series parentPath="uat.fft.client.GA2MRAH.AP711671.fusion.ebond-fusion-nucleus-app.ebond-fusion-rfq-credit" id="OpenFin Memory(MB)" latestItemTimestamp="1588867209058" datetime="2020/05/07 18:00:09" latestItemValue="116"/>
<series parentPath="uat.fft.client.GA2MRAH.AP711671.fusion.ebond-fusion-nucleus-app.ebond-fusion-risk-app" id="OpenFin Memory(MB)" latestItemTimestamp="1588867209058" datetime="2020/05/07 18:00:09" latestItemValue="113"/>
<series parentPath="uat.fft.client.GA2OUGB.AP721570.fusion.ebond-fusion-nucleus-app.ebond-fusion-order-app" id="OpenFin Memory(MB)" latestItemTimestamp="1588866117341" datetime="2020/05/07 17:41:57" latestItemValue="104"/>
<series parentPath="uat.fft.client.GA2OUGB.AP721570.fusion.ebond-fusion-nucleus-app.ebond-fusion-rfq-credit" id="OpenFin Memory(MB)" latestItemTimestamp="1588866117341" datetime="2020/05/07 17:41:57" latestItemValue="112"/>
<series parentPath="uat.fft.client.GA2OUGB.AP721570.fusion.ebond-fusion-nucleus-app.ebond-fusion-risk-app" id="OpenFin Memory(MB)" latestItemTimestamp="1588866117341" datetime="2020/05/07 17:41:57" latestItemValue="116"/>
<series parentPath="uat.fft.client.GA2PASH.AP722622.fusion.ebond-fusion-nucleus-app.ebond-fusion-rfq-credit" id="OpenFin Memory(MB)" latestItemTimestamp="1588850319464" datetime="2020/05/07 13:18:39" latestItemValue="103"/>
<series parentPath="uat.fft.client.GA2SA7H.AP721875.fusion.ebond-fusion-nucleus-app.ebond-fusion-quote-app" id="OpenFin Memory(MB)" latestItemTimestamp="1588866495109" datetime="2020/05/07 17:48:15" latestItemValue="110"/>
<series parentPath="uat.fft.client.GA2SA7H.AP721875.fusion.ebond-fusion-nucleus-app.ebond-fusion-rfq-credit" id="OpenFin Memory(MB)" latestItemTimestamp="1588866495109" datetime="2020/05/07 17:48:15" latestItemValue="102"/>
<series parentPath="uat.fft.client.GA2SA7H.AP721875.fusion.ebond-fusion-nucleus-app.ebond-fusion-risk-app" id="OpenFin Memory(MB)" latestItemTimestamp="1588866495109" datetime="2020/05/07 17:48:15" latestItemValue="123"/>
<series parentPath="uat.fft.client.ga2cria.AP716960.fusion.ebond-fusion-nucleus-app.ebond-fusion-quote-app" id="OpenFin Memory(MB)" latestItemTimestamp="1588874030265" datetime="2020/05/07 19:53:50" latestItemValue="130"/>
<series parentPath="uat.fft.client.ga2cria.AP716960.fusion.ebond-fusion-nucleus-app.ebond-fusion-rfq-credit" id="OpenFin Memory(MB)" latestItemTimestamp="1588874030265" datetime="2020/05/07 19:53:50" latestItemValue="125"/>
<series parentPath="uat.fft.client.ga2cria.AP716960.fusion.ebond-fusion-nucleus-app.ebond-fusion-risk-app" id="OpenFin Memory(MB)" latestItemTimestamp="1588874030265" datetime="2020/05/07 19:53:50" latestItemValue="107"/>
<series parentPath="uat.fft.client.ga2fasa.AP715911.fusion.ebond-fusion-nucleus-app.ebond-fusion-order-app" id="OpenFin Memory(MB)" latestItemTimestamp="1588873964945" datetime="2020/05/07 19:52:44" latestItemValue="101"/>
<series parentPath="uat.fft.client.ga2fasa.AP715911.fusion.ebond-fusion-nucleus-app.ebond-fusion-risk-app" id="OpenFin Memory(MB)" latestItemTimestamp="1588873964945" datetime="2020/05/07 19:52:44" latestItemValue="113"/>
보시다시피 각 AP 번호는 다르며 처음 두 글자도 다를 수 있으므로 다른 URL에서는 AP가 BR AD CS일 수도 있습니다. 모든 AP 번호만 포함하는 목록을 추출하고 생성하는 명령을 작성해야 하지만 AP 부분은 모든 문자를 추출할 수 있어야 하고, 숫자 부분만 모든 숫자를 허용해야 하며, 추출하려면 중복 항목도 제거해야 합니다. 목록에서 AP.
지금까지 다음 쉘 스크립트를 작성했습니다.
echo 'ID,User,HostName,Application,DateTime,Value'
curl -k -s 'https://testurl'
이제 명령 끝에 파이프를 추가하고 awk, sed 또는 grep을 사용해야 합니다. 모든 AP 번호를 추출하고, 중복된 AP 번호를 제거하고, 모든 AP 번호 목록을 만들어야 합니다. 하지만 AP라는 글자도 동적이며 알파벳 두 글자로 변경될 수 있다는 점을 기억하세요.
다음 awk 명령을 시도했습니다.
/usr/bin/curl -k -s https://example.com:18080/seriessnapshot?substringSearch=OpenFin%20Memory | awk -F".AP" '{print $2}' | awk -F. '{print $1}' | sort | uniq
그러나 이는 다음만 반환합니다.
717958
717961
717962
717977
717980
717982
717996
718397
718685
718954
719045
719051
719257
719262
719265
719432
719488
719821
719905
719906
720203
720455
720467
720911
721548
721569
721732
721737
숫자의 처음 두 글자(두 글자일 수 있음)는 반환하지 않습니다. awk 명령에 숫자 앞의 두 글자를 허용한 다음 임의의 숫자를 허용하고 전체 열을 인쇄하도록 지시하는 방법을 아시나요?
답변1
@Nikhil, 귀하의 원래 질문에는 XML 형식이 언급되지 않았으며 원시 콘텐츠만 있었습니다. 데이터가 XML에 포함되어 있다는 것을 알고 있으므로 보다 안정적인 접근 방식은 xmlstarlet을 제안하는 다른 답변 중 하나 또는 이 작업과 관련된 도구의 조언을 따르는 것입니다.
만약 너라면확신하는형식은 변경되지 않으며 이에 대해 빠르고 더러운 작업을 수행하고 싶고 awk를 사용하고 싶습니까? 이것이 효과가 있습니까?
awk -F"." '{print $5}' | sort --unique
다음은 이 코드에 대한 링크와 질문의 일부 샘플 데이터입니다. 온라인으로 사용해 보세요!
답변2
curl "URL" | grep -E -o 'AP[[:digit:]]+' | sort -u
이렇게 하면 데이터를 가져와 모든 AP 번호를 추출하고 중복 항목을 제거하면서 정렬합니다.
이는 AP 번호가 표시되는 데이터에만 나타나고 다른 관련 없는 위치에는 표시되지 않는다고 가정합니다(표시하는 XML 문서는 끝 부분이 잘립니다).
XML을 보다 안전하게 구문 분석하려면 다음을 사용하십시오 xmlstarlet
.
curl "URL" |
xmlstarlet sel -t -v '/timeSeries/series/@parentPath[contains(.,"AP")]' |
grep -E -o 'AP[[:digit:]]+' | sort -u
이는 속성의 모든 긴 값을 구문 분석하여 and parentPath
에 전달합니다 .grep
sort
그것 으로 이 모든 일을 하는 xmlstarlet
것도 가능 합니다 . 여기서는 문자열을 포함하는 속성 값에 해당하는 모든 AP 번호가 필요하다고 가정합니다 credit
.
curl "URL" |
xmlstarlet sel -t \
-m '/timeSeries/series/@parentPath[contains(., "credit")]' \
-v 'concat("AP", substring-before(substring-after(., "AP"), "."))' -nl
문자열을 찾는 것만으로도 credit
일부 AP 번호가 손실된다면, 모두 추출하고 sort -u
이전과 같이 결과 목록을 고유하게 만드세요.
curl "URL" |
xmlstarlet sel -t \
-m '/timeSeries/series/@parentPath' \
-v 'concat("AP", substring-before(substring-after(., "AP"), "."))' -nl |
sort -u
답변3
이는 파일 형식이 목록과 일치한다고 가정합니다.
cat sample.txt | awk -F".AP" '{print $2}' | awk -F. '{print $1}' | sort | uniq