特定の割合の行に特定の文字列が含まれている場合にファイルを移動するためのシェルスクリプト

特定の割合の行に特定の文字列が含まれている場合にファイルを移動するためのシェルスクリプト

特定の割合の行に特定の文字列が含まれている場合は、ファイルを移動するシェルスクリプトを作成しています。

私のディレクトリには約2000個のファイルがあり、各ファイルにはデータ列が含まれています。各ファイルの行数は異なります。最初の行はタイトルで、他の行には0より大きい数字が含まれ、小数点以下6桁まで正確です。前任者:

OMEGA
0.000010
0.000010
0.042214
0.042214
0.042214
0.042214
1.147412

行の10%以上が1より大きい値を含むすべてのファイルに興味があります。 「1」を含む行の割合を使用します。 "."に - しかし、構文に問題があります。 ".omega"は私が興味のあるファイルの拡張子です。

これが私が持っているものです:

for file in *.omega
do
 if [ $(($(grep '1.' $file | wc -l) / $(grep '.' $file | wc -l)) * 100) -ge 10 ]; then
 mv $file positive_COGs/ 
 fi
done

私は成功せずにブラケット/ブラケットを配置しようとしました。また、 - "-ge"を使用して%(整数ではない)を整数 "10"(?)と比較するのが適切かどうかはわかりません。

どんなアドバイスも本当にありがとうございます。 bashを使ってスクリプトを実行しています。

乾杯!

ベストアンサー1

問題は、bashが整数演算を実行するので、20/50を取ると常に0であることです。したがって、テスト数> 1を行数で割った値は0、0 * 100は0、常に10未満です。

除算する前に100を掛けると、希望の結果が出ると思います。

おすすめ記事