[英]Print only values smaller than certain threshold in bash
我有一個超過10000行的文件,大多數是數字和一些字符串;
-40
-50
stringA
100
20
-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是您要用作上限的數字,而FILENAME是包含10000多行數字的文件。 你可以刪除| sort -n
如果你不想對數字進行排序,請| 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
只有中間線會給出輸出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.