我有一個文件,其中包含多於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
見下面我的解決方案,以避免警告不可否認,我的解決辦法是不那麼優雅 –