首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除第二个数字中的所有字段,而不是5个连续的数字数字。

删除第二个数字中的所有字段,而不是5个连续的数字数字。
EN

Stack Overflow用户
提问于 2017-07-03 18:36:38
回答 3查看 109关注 0票数 1
代码语言:javascript
复制
 Record | RegistrationID

 41-1|10551
 1-105|5569
  4-7|10043
  78-3|2176
   3-1|19826
   12-1|1981

输出文件必须

代码语言:javascript
复制
 Record | RegistrationID
1-1|10551
3-1|19826
5-7|10043

我的文件是一个管道分隔的

第二组中任何小于或超过5长的数字都必须删除,即只有有5个连续号码的记录才能被删除。我和谷歌一起工作了一个小时来解决这个问题,任何建议都是非常感谢的。提前感谢

尝试了这个grep -E‘0-9{5}$|$’文件名->没有得到任何结果,tx到cyrus

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-07-03 20:16:51

如果这做不到你想做的事

代码语言:javascript
复制
$ awk '(NR==1) || ($NF~/^[0-9]{5}$/)' file
 Acno | Zip
 high | 12345
tyty | 19812

然后,您的实际输入文件与您在示例中提供的格式不匹配,如果您需要更多的帮助,您必须自己跟进以找出差异,并发布更有代表性的示例输入。

给定更新后的输入文件,在|s周围没有空格:

代码语言:javascript
复制
$ awk -F'|' '(NR==1) || ($NF~/^[0-9]{5}$/)' file
 Acno | Zip
 45775-1|10551
  2734455-7|10043
   167115-1|19826

如果您的输入中确实有前导空格,您想要从输出中删除,这很容易完成,但我现在假设您实际上并没有这种情况,只是在您发布的示例输入文件中出现了更多的错误。

如“任择议定书”所示,使用gawk 3.1.7 (见下面的评论):

代码语言:javascript
复制
awk --re-interval -F'|' '(NR==1) || ($NF~/^[0-9]{5}$/)' file
票数 0
EN

Stack Overflow用户

发布于 2017-07-03 21:39:37

如果您的列(字段)是|-separated,可能包含空格,而第二个字段中的筛选条件正好是5位,那么尝试如下:

代码语言:javascript
复制
awk -F'|' '$2 ~ /^[ ]*[0-9]{5}[ ]*$/' file

此外,要通过标头(第一行),另外:

代码语言:javascript
复制
awk -F'|' 'NR==1 || $2 ~ /^[ ]*[0-9]{5}[ ]*$/' file
票数 0
EN

Stack Overflow用户

发布于 2017-07-04 08:02:01

选项以支持正则表达式中的区间表达式。

代码语言:javascript
复制
gawk --re-interval -F'|' '$NF~/^[0-9]{4,5}$/' file
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44892071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档