线提取取决于特定列的范围

时间:2010-08-18 22:17:23

标签: sed

我想从文本文件中提取一些行,我最近开始调整sed,

我有一个结构

的文件
88 3 3 0 0 1 101 111 4 3
89 3 3 0 0 1 3 4 112 102
90 3 3 0 0 1 102 112 113 103
91 3 3 0 0 2 103 113 114 104

我想要做的是根据第二列提取信息,我在我的bash脚本中使用......(参数2是infile)

sed  -n '/^[0-9]* [23456789]/ p' < $2 > out

然而,除了范围[23456789]之外我有不同的条目,例如10,因为它由1和0组成,为了得到这两个字符应该在我猜的范围内,但是有条目'1 '(第二栏)我不喜欢这样写怎么能写'10'而不是'1'。

最佳, 了Umut

3 个答案:

答案 0 :(得分:0)

sed -rn '/^[0-9]* (2|3|4|5|6|7|8|9|10)/p' < $2 > out

答案 1 :(得分:0)

sed  -rn '/^[0-9]* ([23456789]|10)/ p'  < $2 > out

您需要 extend-regexp 支持(-r)才能拥有|运算符(或)

另一个有趣的方式是:

sed  -rn '/^[0-9]* ([23456789]|[0-9]{2,})/ p'  < $2 > out

这意味着[23456789] 重复2位或更多位数。

答案 2 :(得分:0)

即时您在数据中看到可变大小的列,您应该开始考虑awk

awk '$2 > 1 && $2 < 11 {print}{}'
假设你的文件格式正确,

就可以了。