내 입력 파일의 일부 줄은 다음과 같습니다.
08:51:36 UN 127.0.0.1
08:51:36 UN 127.0.0.2
08:51:36 UN 127.0.0.3
08:53:50 DN 127.0.0.1
08:53:50 DN 127.0.0.2
08:53:50 DN 127.0.0.3
IP 주소를 입력하는 쉘 스크립트를 작성하고 싶습니다.
./CountRate.sh 127.0.0.1
스크립트는 0.5를 반환해야 합니다. 공식은 IP 127.0.0.1이 있는 노드가 UN 상태("1")에 있는 횟수를 127.0.0.1("2")이 나타나는 행 수로 나눈 값입니다. 이를 달성하려면 어떤 Linux 명령을 사용해야 합니까?
답변1
스크립팅 awk
언어를 사용하면 다음과 같은 작업이 쉬워집니다.
awk -v host=127.0.0.1 '
$3 == host {n++; x += $2 == "UN" ? 1 : 0}
END {print x/n}
' inputfile
0.5
답변2
다음 스크립트는 두 개의 매개변수(IP 주소 및 입력 파일 이름)를 사용합니다.
#!/bin/bash
echo "IP address: $1"
echo "Input file name: $2"
Count_IP=$(grep -c "$1" "$2" )
Count_IP_UN=$(grep "$1" "$2" |grep -c "UN")
echo "IP Count: $Count_IP"
echo "IP Count with UN: $Count_IP_UN"
Result=$(bc <<< "scale=1; $Count_IP_UN/$Count_IP"| awk '{printf "%0.1f", $0}')
echo "The result is: $Result"
실행 예:
$ ./CountRate.sh 127.0.0.1 inp.txt
IP address: 127.0.0.1
Input file name: inp.txt
IP Count: 2
IP Count with UN: 1
The result is: 0.5