Grep/Awk 用于查找介于之间的值

Grep/Awk 用于查找介于之间的值

所以我有一个文本文件,其中包含如下行:

http://sg.ovies.m/.ss/ (Status: 200) [Size: 128]
http://sg.mo.v/.dev/ (Status: 200) [Size: 12328]
http://som.b/.hal/ (Status: 200) [Size: 1238]
http://m.cb/.ho/ (Status: 200) [Size: 0]
http://sm.jo/.hK/ (Status: 200) [Size: 0]`

我只想 grep Size 在 1 到 100 之间的行。

所以输出将是:

http://sg.ovies.m/.ss/ (Status: 200) [Size: 128]
http://sg.mo.v/.dev/ (Status: 200) [Size: 12328]
http://som.b/.hal/ (Status: 200) [Size: 1238]

如何使用 grep 或 awk 完成此操作?

答案1

Awk 让这变得简单:

awk '{size=$5; sub(/]/, "", size); size=size+0; if (size <= 100 && size >= 1) {print $0 } }' file_to_read.txt

用更友好的方式写这个:

awk '{
    # create a new variable "size".
    # items are separated by spaces, we need the 5th item
    size=$5;

    # remove the trailing "]"
    sub(/]/, "",  size);

    # make sure size is an int
    size=size+0;

    # Choose rows with seize between 1 and 100
    if (size <= 100 && size >= 1) {
        # print the whole line
        print
    }

    }'  file_to_read.txt

答案2

考虑到该:字符仅出现在输入中的 3 个位置,我们可以将其用作字段分隔符,然后通过子字符串提取数字进行比较(考虑前导空格):

awk -F':' '{size=substr( $NF,2,length($NF)-2 ); if((size>=1)&&(size<=100)) print }' input.txt

请注意,您要求“大小:介于 1 到 100 之间”。但是,您的示例输出显示为“大小大于 1”。如果是这样的话,那么 if 语句可以简化为if(size > 1) print

答案3

下面的模式应该可以做到:

grep -E 'Size: (?:100|[1-9]|[0-9]{2})]' test

我告诉 grep 使用扩展正则表达式语法 ( -E) 并尝试匹配100以下 0 到 99 之间的一个值Size:

相关内容