Record | RegistrationID
41-1|10551
1-105|5569
4-7|10043
78-3|2176
3-1|19826
12-1|1981
输出文件必须
Record | RegistrationID
1-1|10551
3-1|19826
5-7|10043
我的文件是管道分隔
必须删除第二列中小于或大于5lenght的任何数字,即只有具有5个连续数字的记录必须保留。我在谷歌一小时内解决这个问题所给出的任何建议都会非常明显。提前谢谢
尝试了这个grep -E'[0-9] {5} $ | $'文件名 - >没有得到任何结果,tx到cyrus
答案 0 :(得分:0)
如果这不符合您的要求:
$ awk '(NR==1) || ($NF~/^[0-9]{5}$/)' file
Acno | Zip
high | 12345
tyty | 19812
然后您的真实输入文件与您在示例中提供的格式不匹配,如果您需要更多帮助,则必须自己跟进以找出差异并发布更具真实代表性的示例输入。< / p>
鉴于您更新的输入文件,|
s周围没有空格:
$ awk -F'|' '(NR==1) || ($NF~/^[0-9]{5}$/)' file
Acno | Zip
45775-1|10551
2734455-7|10043
167115-1|19826
如果您的输入中确实有一个领先的空白区域,您希望从输出中轻松删除,但我现在要假设您实际上并没有真正拥有这种情况而且您的输入中存在更多错误发布了样本输入文件。
使用gawk 3.1.7作为OP(见下面的评论):
awk --re-interval -F'|' '(NR==1) || ($NF~/^[0-9]{5}$/)' file
答案 1 :(得分:0)
如果你的列(字段)是|
- 分隔,可能包含空格,过滤条件恰好是第二个字段中的5位数,那么试试这个:
awk -F'|' '$2 ~ /^[ ]*[0-9]{5}[ ]*$/' file
此外,要另外传递标题(第一行):
awk -F'|' 'NR==1 || $2 ~ /^[ ]*[0-9]{5}[ ]*$/' file
答案 2 :(得分:-1)
添加--re-interval选项以支持正则表达式中的区间表达。
gawk --re-interval -F'|' '$NF~/^[0-9]{4,5}$/' file