스크립트 출력 파일에서 일부 데이터 추출

스크립트 출력 파일에서 일부 데이터 추출

여러 명령을 실행하고 모든 출력을 집계하여 로그 파일에 삽입하는 스크립트가 있습니다. 실행되는 명령 중 하나는 "netstat -anp"입니다. 이 파일을 검색하여 특정 IP에 대한 모든 명령 실행 및 필터를 찾을 수 있기를 원합니다. sed나 awk를 사용하여 이를 달성할 수 있습니까? 그렇다면 명령은 어떤 모습일까요?

답변1

파일에서 데이터를 필터링하려면 grep을 사용하는 것이 가장 좋습니다. 예를 들어:

grep <search string> <filename>

awk를 사용하면 다음과 같은 것을 사용할 수 있습니다.

awk '/string/ {command}' <filename>

사용할 수 있는 IP를 계산하려면

uniq -c <filename>

이것은 카운트와 함께 고유 IP를 제공합니다

답변2

"wrapped"는 모든 개행 문자가 제거되고 따라서 각 명령의 출력이 한 줄로 "wrapped"된다는 것을 의미한다고 생각합니다. 그렇다면 grep ... | awk ...작업을 수행하게 되지만 두 명령이 모두 필요하지는 않습니다("하나로 충분할 때 두 개를 사용하지 마십시오"는 일반적으로 좋은 생각입니다). 또한 명령줄에 몇 가지 문제가 있습니다(예: 입력이 없지만 grep파일 이름이 주어지면 작동하지 않으며 옵션이 있을 때 사용할 이유가 없음을 awk의미함 ).grepwcgrep-c

ipaddr=192.168.0.1
grep -c "netstat -anp.*$ipaddr" logfile

편집하다: 최근 의견에 따르면 특정 시간 간격에 IP 주소가 나타나는 횟수를 계산하고 싶다고 합니다. 명령 은 netstat시간 간격 내에서 여러 번 실행되고 모두 한 줄에 있으므로 간단한 명령으로 uniq -c는 충분하지 않습니다. 사실, Perl을 사용하지 않고 내 마음에 가장 먼저 떠오르는 것은 다음과 같습니다.

ipaddr=192.168.0.1
grep "netstat -anp.*$ipaddr" logfile |
    tr -cs '0-9.' '\012' |
    grep -c "$ipaddr"

POSIX 또는 BSD 스타일 명령이라고 가정합니다 tr. 또한 grep찾고 있는 IP 주소(출력에 일반적임 netstat) 외에 다른 IP 주소가 많이 있을 수 있으므로 두 번째 IP 주소가 필요합니다.

관련 정보