使用 grep 过滤大于和小于范围的值 [英] Filter with grep a value greater and less than range

查看:86
本文介绍了使用 grep 过滤大于和小于范围的值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个包含这些数据的 csv:

I have a csv with this data:

0,M,19,finnish,english swedish german 
9,M,30,urdu,english 
122,F,26,finnish,english swedish german
83,M,20,finnish,english french swedish 
44,F,20,finnish,english swedish 
10,F,29,finnish,english

而且我需要一个使用 GREP 的过滤器,而不是采用大于 10 且小于 99 的用户值(第一列).

And I need a filter using GREP than take user value (first column) great than 10 and less than 99.

这是我最好的动作:

cat demographic_info.csv | grep -e "1[0-9]*" 

推荐答案

假设您希望只匹配 1099 的数字(即 1198 包含),你可以使用

Assuming you want to match numbers from 10 to 99 exclusively (that is, 11 to 98 inclusively), you can use

grep -E '^(1[1-9]|[2-8][0-9]|9[0-8]),' file

数字范围模式在如何用正则表达式匹配X和Y之间的数字?,我只需要删除 ?: 因为 POSIX ERE 不支持非捕获组.

The numeric range pattern is automatically generated at How to match numbers between X and Y with regexp?, I just needed to remove ?: as POSIX ERE does not support non-capturing groups.

然而,

awk -F, '$1 < 99 && $1 > 10' file

看起来更适合这项任务.它使用逗号作为字段分隔符,并检查第一个字段值是否小于 99 且大于 10,并仅输出那些行.

looks a much better fit for this task. It uses a comma as a field separator, and checks if the first field value is less than 99 and bigger than 10, and outputs only those lines.

查看在线演示:

#!/bin/bash
s='0,M,19,finnish,english swedish german 
9,M,30,urdu,english 
122,F,26,finnish,english swedish german
83,M,20,finnish,english french swedish 
44,F,20,finnish,english swedish 
10,F,29,finnish,english'
awk -F, '$1 < 99 && $1 > 10' <<< "$s"
echo "---"
grep -E '^(1[1-9]|[2-8][0-9]|9[0-8]),' <<< "$s"

输出:

83,M,20,finnish,english french swedish 
44,F,20,finnish,english swedish 
---
83,M,20,finnish,english french swedish 
44,F,20,finnish,english swedish 

这篇关于使用 grep 过滤大于和小于范围的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆