在第二列中打印带有数字的行

时间:2017-06-30 11:49:24

标签: awk sed

这是我的数据 - 我超过1000人。如何只获得包含数字的rec。

Records | Num

123 | 7 Y1 91

7834 | 7PQ34-102

AB12AC|87 BWE 67

5690278| 80505312

7ER| 998

输出必须是

7ER| 998

5690278| 80505312

我是linux编程的新手,任何帮助对我都非常有用。谢谢所有

2 个答案:

答案 0 :(得分:1)

我会使用awk

awk -F'[[:space:]]*[|][[:space:]]*' '$2 ~ /^[[:digit:]]+$/'

如果您想要在评论中打印已删除的行数,可以使用:

awk -F'[[:space:]]*[|][[:space:]]*' '
    {
        if($2~/^[[:digit:]]+$/){print}else{c++}
    }
    END{printf "%d lines deleted\n", c}' file

答案 1 :(得分:0)

一个简短的GNU awkgawk)脚本,用于过滤第二列(字段)中带数字的行,假设一个单词字段(例如{ {1}}或1234):

12AB

我们使用GNU extension for regexp operators,即awk -F'|' '$2 ~ /\y[0-9]+\y/' file 来匹配字边界。除此之外,非常简单:我们在\y上拆分字段并在第二个字段中查找孤立的数字。

修改:由于问题已更新,现在明确允许第二个字段中包含多个字(例如|12 AB12-34),在第二个字段中仅使用数字和分隔符 >

12 34

或者,如果我们说在第二个字段中只禁止字母,我们可以使用:

awk -F'|' '$2 ~ /^[- 0-9]+$/' file