私はこのような10000行以上のファイルを持っています。ほとんどは数字といくつかの文字列です。bashの特定のしきい値より小さい値を表示します
-40
-50
stringA
-200
...
私はbash(または他の)スクリプトを書いて、このファイルを読むのは数字(文字列なし)とゼロより小さい値(または他の事前定義された数字)のみを出力することを望みます。これはどうすればできますか?
この場合、出力(ソート)が
-40
-50
-200
...
私はこのような10000行以上のファイルを持っています。ほとんどは数字といくつかの文字列です。bashの特定のしきい値より小さい値を表示します
-40
-50
stringA
-200
...
私はbash(または他の)スクリプトを書いて、このファイルを読むのは数字(文字列なし)とゼロより小さい値(または他の事前定義された数字)のみを出力することを望みます。これはどうすればできますか?
この場合、出力(ソート)が
-40
-50
-200
...
cat filename | awk '{if($1==$1+0 && $1<THRESHOLD_VALUE)print $1}' | sort -n
$ 1 == $ 1 + 0の文字列が数値であることを確認し、それはそれはthreshold_valueに未満であることを確認してください(あなたが望むものは何でも番号に変更する。それが合格した場合、それをプリントアウトして、ソートされますに。
awk '$1 < NUMBER { print }' FILENAME | sort -n
NUMBERであろうあなたが上のボーとして使用したい番号ですundとFILENAMEは、10000行以上の数字のファイルです。数字を並べ替えたくない場合は、| sort -n
を削除することができます。
編集:小さな注意書き。あなたの文字列が数字で始まっている場合、それはその数字として扱われます。それ以外の場合は無視する必要があります。次のように
別の方法としては、次のとおりです。
function compare() {
if test $1 -lt $MAX_VALUE; then
echo $1
fi
} 2> /dev/null
は、この上さらに、ヘルプのためのhelp test
とman bash
を見てください。 2> /dev/null
は、2つの整数以外を比較しようとすると、test
によってスローされたエラーをリダイレクトします。次のような関数を呼び出してください。
compare 1
compare -1
compare string A
中間の行だけが出力されます。
このソリューションはzkhrに比べて利点があることに注意してください。数字で始まる文字列は数字として扱われません。 –
さらに柔軟性が必要な場合は、awkスクリプトにしきい値を渡すことができます。awk -v value = $ VALUE '$ 1
警告を避けるには、下記の私のソリューションを参照してください。 –