シェルスクリプトでテキストファイルの数を計算する方法

シェルスクリプトでテキストファイルの数を計算する方法

以下を含むテキストファイルがあります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}

関連情報