簡體   English   中英

在bash中僅打印小於特定閾值的值

[英]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 testman bash以獲得進一步的幫助。 當您嘗試比較兩個整數以外的其他內容時, 2> /dev/null重定向test引發的錯誤。 調用函數如:


    compare 1
    compare -1
    compare string A

只有中間線會給出輸出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM