이 활동이 중단되었습니다. 아래와 같은 txt 파일이 있습니다.
0112 00000 34 JOB RECOVERY status poll (ORDERID 2N000, RUNNO 0001) ACCEPTED, OWNER
0112 00000 35 JOB RECOVERY status poll (ORDERID 2N000, RUNNO 0001)STARTED , APPL TYPE
0112 00000 36 JOB PROCESS Kafka(ORDERID 2N001, RUNNO 0001) ACCEPTED , OWNER
0112 00001 37 JOB PROCESS Kafka (ORDERID 2N001, RUNNO 0001) STARTED, APPL_TYPE
0112 00001 38 JOB RECOVERY status poll(ORDERID 2N000, RUNNO 0001) ENDED OK ,ELAPSED - 0.02 SEC
0112 00003 39 JOB PROCESS (ORDERID 2N001, RUNNO 0001) ENDED OK, ELAPSED - 2.28 SEC
orderid
각 작업에 대해 경과 시간 값을 가져와야 합니다 . orderid
2N000이면 경과 시간 0.02초를 얻어야 합니다. 이는 orderid
쉘 스크립트를 사용하여 파일에서 가져오는 데 필요한 모든 것에 해당됩니다.
이런 출력이 필요합니다
orderid jobname ELAPSED
2N000 RECOVERY status 0.02
2NOO1 PROCESS Kafka 2.28
답변1
이 sed
스크립트는 원하는 작업을 수행해야 합니다.
sed '/ELAPSED/!d;s/.*JOB \([^(]*\)(ORDERID \([^,]*\).*- \([0-9.]*\).*/\2 \1 \3/'
실제 데이터에 맞게 조정해야 할 수도 있으므로 이것이 수행하는 작업을 설명하겠습니다.
/ELAPSED/!d
d
!
( ) 를 포함하지 않는 모든 줄을 삭제하세요ELAPSED
. 이ELAPSED
줄에는 필요한 모든 정보가 포함되어 있기 때문입니다. 해당 문자열이 다른 곳에 나타날 수 있는 경우 이에 따라 스크립트를 조정해야 합니다.- 다음
s
대체 명령에는 행에서 추출할 올바른 부분을 식별해야 하는 복잡한 정규식이 포함되어 있습니다..*JOB
JOB
키워드 앞의 모든 항목 과 일치합니다 . 마찬가지로JOB
직업 이름 안에도 나타날 수 있다면 추가 조건이 필요하지만 어떻게 알 수 있나요?[^(]*
(
orderid가 시작되기 전의 모든 항목 과 일치합니다 .\(\)
교체 부품에 배치할 수 있도록 부품이 둘러싸여 있습니다\1
.RECOVERY status poll
출력에서처럼 누락되는 대신 전체 작업 이름을 얻을 수 있다는 점에 유의하세요 !poll
(ORDERID
말한 내용과 일치하므로 다음 부분이 주문됩니다.[^,]*
다음 쉼표 앞의 모든 항목과 일치합니다. 이것은 다시\(\), so it can be referred to as
\2`로 둘러싸여 있습니다..*-
마지막 대시와 다음 공백을 포함하여 모든 항목과 일치합니다. 시간이 지나기 전에 다 먹고 싶다[0-9.]*
몇 개의 숫자와 포인트입니다. 이는 경과 시간에 맞아야 하며 하위 문자열 번호여야 합니다.\3
.*
나머지 줄과 일치합니다.SEC
- 대체 문자열은
\2 \1 \3
세 요소를 원하는 순서로 붙여넣고 요소 사이에 공백을 추가합니다. 필요에 따라 조정하십시오. - 열 헤더를 첫 번째 행에 배치하려면 직접 수행하세요.
답변2
나는 또한 "쉘 스크립트 사용"을 무시했습니다. 그래서 awk를 사용해 보았습니다.
BEGIN {
# TAB between the words
print "orderid jobname Elapsed"
}
/ ACCEPTED/ {
p = match($0,/^.... ..... .. ... ([A-Za-z ]*).*ORDERID (.....)/,A)
if (p>0) {
# print A[2]
O[A[2]] = A[1]
}
}
/ELAPSED/ {
p = match($0,/ORDERID (.....).*ELAPSED - (.*) SEC$/,A)
# TAB between the double quotes
print A[1] " " O[A[1]] " " A[2]
}
탭으로 구분된 형식을 반환합니다.
orderid jobname Elapsed
2N000 RECOVERY status poll 0.02
2N001 PROCESS Kafka 2.28