在bash中仅打印小于特定阈值的值

Ope*_*way 7 sorting bash scripting filter

我有一个超过10000行的文件,大多数是数字和一些字符串;

-40

-50

stringA

100

20

-200

...

我想写一个bash(或其他)脚本,读取此文件只输出数字(没有字符串),只有那些小于零的值(或其他一些预定义的数字).如何才能做到这一点?

在这种情况下,输出(已排序)将是

-40

-50

-200

...

sam*_*ing 9

cat filename | awk '{if($1==$1+0 && $1<THRESHOLD_VALUE)print $1}' | sort -n
Run Code Online (Sandbox Code Playgroud)

$ 1 == $ 1 + 0确保字符串是一个数字,然后检查它是否小于THRESHOLD_VALUE(将其更改为您希望的任何数字.如果它通过则打印出来,并排序.


小智 6

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

其中 NUMBER 是要用作上限的数字,FILENAME 是包含 10000 多行数字的文件。| sort -n如果您不想对数字进行排序,可以删除。

编辑:一个小警告。如果您的字符串以数字开头,它会将其视为该数字。否则应该忽略它。

  • 如果您需要更大的灵活性,可以将阈值传递到 awk 脚本中:`awk -v value=$VALUE '$1 &lt; value'` (3认同)