2011-07-27 7 views
2

私はこのような10000行以上のファイルを持っています。ほとんどは数字といくつかの文字列です。bashの特定のしきい値より小さい値を表示します

-40

-50

stringA

-200

...

私はbash(または他の)スクリプトを書いて、このファイルを読むのは数字(文字列なし)とゼロより小さい値(または他の事前定義された数字)のみを出力することを望みます。これはどうすればできますか?

この場合、出力(ソート)が

-40

-50

-200

...

答えて

4
cat filename | awk '{if($1==$1+0 && $1<THRESHOLD_VALUE)print $1}' | sort -n 

$ 1 == $ 1 + 0の文字列が数値であることを確認し、それはそれはthreshold_valueに未満であることを確認してください(あなたが望むものは何でも番号に変更する。それが合格した場合、それをプリントアウトして、ソートされますに。

3

awk '$1 < NUMBER { print }' FILENAME | sort -n

NUMBERであろうあなたが上のボーとして使用したい番号ですundとFILENAMEは、10000行以上の数字のファイルです。数字を並べ替えたくない場合は、| sort -nを削除することができます。

編集:小さな注意書き。あなたの文字列が数字で始まっている場合、それはその数字として扱われます。それ以外の場合は無視する必要があります。次のように

+2

さらに柔軟性が必要な場合は、awkスクリプトにしきい値を渡すことができます。awk -v value = $ VALUE '$ 1

+0

警告を避けるには、下記の私のソリューションを参照してください。 –

1

別の方法としては、次のとおりです。

 
    function compare() { 
     if test $1 -lt $MAX_VALUE; then 
      echo $1 
     fi 
    } 2> /dev/null 

は、この上さらに、ヘルプのためのhelp testman bashを見てください。 2> /dev/nullは、2つの整数以外を比較しようとすると、testによってスローされたエラーをリダイレクトします。次のような関数を呼び出してください。

 
    compare 1 
    compare -1 
    compare string A 

中間の行だけが出力されます。

+1

このソリューションはzkhrに比べて利点があることに注意してください。数字で始まる文字列は数字として扱われません。 –

関連する問題