쉘 스크립트에서 텍스트 파일의 숫자를 계산하는 방법

쉘 스크립트에서 텍스트 파일의 숫자를 계산하는 방법

다음을 포함하는 텍스트 파일이 있습니다 t1.txt.

300
400
500
600

이제 이 텍스트에서 450보다 작은 숫자가 몇 개인지 확인하고 싶습니다. 다음 코드를 제공합니다.

b=0
for i in $(cat t1.txt)
do
  if [$i -lt 450]
  then
    ((b=b+1))
  fi
done
echo b

하지만 작동하지 않습니다.

어떻게 해야 합니까? 감사해요.

답변1

b=0
for i in $(cat t1.txt)
do
  # convert float to int
  i=$(echo $i | cut -d. -f1)
  if [ $i -lt 450 ] # comment: need spaces next to the the square brackets
  then
    ((b=b+1))
  fi
done
echo $b  # comment: need to $

답변2

awk는 이런 걸 잘해요:

$ awk '$1<450{c++} END{print c+0}' t1.txt
2

작동 방식:

  • $1<450 {c++}

    이 변수는 첫 번째 필드가 450보다 작은 행에 대해 1씩 증가합니다 c.

  • END{print c+0}

    모든 행을 읽은 후 c값이 인쇄됩니다.

이러한 숫자는 정수이거나 부동 소수점 숫자일 수 있습니다. awk는 둘 다 이해합니다.

답변3

#!/bin/bash

    while read line
    do
            if [ "${line}" -lt "450" ]
            then
                    count=$((count+1))
            fi
    done < t.txt

    echo ${count}

관련 정보