我有一个文件,其中包含多于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
当您尝试比较两个整数以外的内容时重定向错误test
。调用如下功能:
compare 1
compare -1
compare string A
只有中间一行才会输出。
请注意,此解决方案比zkhr's有优势:它不会将以数字开头的字符串视为数字。 –
如果您需要更多的灵活性,可以将阈值传递到awk脚本:'AWK -v值= $ VALUE“$ 1
见下面我的解决方案,以避免警告不可否认,我的解决办法是不那么优雅 –