다음을 포함하는 텍스트 파일이 있습니다 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}