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

时间:2011-07-27 17:25:58

标签: bash sorting scripting filter

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

-40

-50

stringA

100

20

-200

...

我想写一个bash(或其他)脚本,读取此文件只输出数字(没有字符串),只有那些小于零的值(或其他一些预定义的数字)。怎么办呢?

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

-40

-50

-200

...

3 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:3)

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

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

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

答案 2 :(得分:1)

另一种选择如下:

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

请查看help testman bash以获取进一步的帮助。当您尝试比较两个整数以外的其他内容时,2> /dev/null会重定向test引发的错误。调用函数如:

    compare 1
    compare -1
    compare string A

只有中间一行会给出输出。