텍스트 파일에서 핑 시간을 추출하여 다른 텍스트 파일/목록으로 정렬하는 방법

텍스트 파일에서 핑 시간을 추출하여 다른 텍스트 파일/목록으로 정렬하는 방법

특정 웹사이트의 핑이 포함된 로그 파일이 있는데, 텍스트 파일은 pingoutput.txt각 핑 응답이 한 줄로 구분되어 호출됩니다. 이제 이 텍스트 파일에서 그 사이의 왕복 시간을 추출 time=하고 이를 다른 텍스트 파일이나 목록으로 추출 해야 합니다 ms. 그런 다음 이를 가장 작은 것부터 가장 큰 것까지 정렬할 수 있습니다.

64 bytes from onofri.org (67.222.36.105): icmp_req=1 ttl=47 time=202 ms
64 bytes from onofri.org (67.222.36.105): icmp_req=2 ttl=47 time=206 ms
64 bytes from onofri.org (67.222.36.105): icmp_req=3 ttl=47 time=215 ms

파일 pingoutput.txt도 약 86400줄로 큽니다. 저는 Linux의 쉘 스크립트를 통해 이 작업을 수행합니다.

답변1

이것은 나에게 효과적입니다.

sed 's/.*time=\([0-9]*\) .*/\1/' times | sort -n > outfile

times이 파일은 어디에 있습니까:

cat times 
64 bytes from onofri.org (67.222.36.105): icmp_req=1 ttl=47 time=202 ms
64 bytes from onofri.org (67.222.36.105): icmp_req=2 ttl=47 time=206 ms
64 bytes from onofri.org (67.222.36.105): icmp_req=3 ttl=47 time=215 ms

다음과 같습니다 outfile.

cat outfile 
202
206
215

답변2

Perl 정규식 및 grep을 사용할 수도 있습니다.

grep -oP '(?<=time\=).*' pingoutput 

답변3

다음 샘플 스크립트를 사용하여 시간을 추출할 수 있습니다.

awk -F\= '{print int($4)}' pingoutput.txt 

=를 구분 기호로 사용하고 int 함수를 사용하여 "202 ms" 문자열의 수만 가져옵니다.

출력을 다른 파일로 리디렉션하려면 다음 명령을 사용하십시오.

awk -F\= '{print int($4)}' pingoutput.txt > times.txt

출력을 정렬하려면 awk의 출력을 sort 명령으로 파이프하면 됩니다.

awk -F\= '{print int($4)}' pingoutput.txt |sort -n > times.txt

답변4

pcre당신에게 선택권이 있다면grep

$ grep -oP 'time=\K\d+' pingout.txt 
202
206
215
$ grep -oP 'time=\K\d+' pingout.txt | sort -n
202
206
215
$ grep -oP 'time=\K\d+' pingout.txt | sort -nr
215
206
202
  • time=\K 활성 후면보기문자열 time=- 이것은 출력의 일부가 아닙니다
  • \d+[^ ]+공백 이외의 문자를 추출하는 데에도 사용할 수 있는 하나 이상의 숫자

출력을 파일에 저장하려면 >리디렉션을 사용하십시오.

$ grep -oP 'time=\K\d+' pingout.txt | sort -n > op.txt
$ cat op.txt 
202
206
215

관련 정보