명령줄에서 줄 수를 계산하고 간단한 나누기를 어떻게 할 수 있나요?

명령줄에서 줄 수를 계산하고 간단한 나누기를 어떻게 할 수 있나요?

내 입력 파일의 일부 줄은 다음과 같습니다.

  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

관련 정보