2016-09-08 2 views
0

특정 값을 추출해야하는 큰 파일이 있습니다. 나는 그 안에 "Brontes"라는 단어가있는 문자열과 서비스 시작 시간을 찾고 있습니다.AWK/SED를 통해 문자열에서 특정 번호 인쇄

awk '/Brontes/{print $18}' file 

및 결과는 올바른 :

2016-09-05 11:23:08,022 ERROR [xxx.xxx.xx] (MSC service thread 1-6) XXXX015875: XXXX AS 7.1.1.Final "Brontes" started (with errors) in 275637ms - Started 1221 of 1307 services (3 services failed or missing dependencies, 71 services are passive or on-demand) 

나는 그렇게이 인쇄하려고했다 (열 금액이 변경됩니다)

을 275637ms ​​그러나 문자열이 약간 다르게 보이는 경우가 발생합니다 동일하지 않아.

동일한 결과를 얻지 만 열의 양에 의존하지 않는 방법으로 어떻게합니까?

+3

에 문자열 Brontes을 포함하는 줄에서 ms로 끝나는 모든 숫자를 인쇄합니다. 한 샘플만으로도이 로그가 어떻게 – fedorqui

+0

을 쓰는지 아이디어를 얻는 데 충분하지 않으며, 숫자가 항상'ms'로 끝나면 그걸 사용할 수 있습니다 ...'grep -oP '\ d + ms'file' – Sundeep

+0

예, 항상 ms로 끝나지 만이 grep은 ms로 모든 값을 반환하고 "Brontes"단어가있는 문자열 만 필요합니다. – klapsak

답변

1

시료 입력 :

echo $ola 
2016-09-05 11:23:08,022 ERROR [xxx.xxx.xx] (MSC service thread 1-6) XXXX015875: XXXX AS 7.1.1.Final Brontes started (with errors) in 275637ms - Started 1221 of 1307 services (3 services failed or missing dependencies, 71 services are passive or on-demand) 

솔루션 사용 AWK : 각 칼럼을 통해 스캐닝과 그것에 MS를 포함하는 열을 출력한다.

echo $ola |awk '/Brontes/{for(i=1;i<=NF;i++) if($i ~ /[0-9]+ms/) print $i}' 
275637ms 
+0

좋아요! 그것은 훌륭하게 작동합니다. 고마워요. @soFan – klapsak

1
grep -oP 'Brontes.* \K\d+ms' file 

이 전에 우리는 당신이 [mcve] 줄 필요가 그 숫자 이에 대한