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我的文件是一个管道分隔的
第二组中任何小于或超过5长的数字都必须删除,即只有有5个连续号码的记录才能被删除。我和谷歌一起工作了一个小时来解决这个问题,任何建议都是非常感谢的。提前感谢
尝试了这个grep -E‘0-9{5}$|$’文件名->没有得到任何结果,tx到cyrus
发布于 2017-07-03 20:16:51
如果这做不到你想做的事
$ awk '(NR==1) || ($NF~/^[0-9]{5}$/)' file
Acno | Zip
high | 12345
tyty | 19812然后,您的实际输入文件与您在示例中提供的格式不匹配,如果您需要更多的帮助,您必须自己跟进以找出差异,并发布更有代表性的示例输入。
给定更新后的输入文件,在|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 (见下面的评论):
awk --re-interval -F'|' '(NR==1) || ($NF~/^[0-9]{5}$/)' file发布于 2017-07-03 21:39:37
如果您的列(字段)是|-separated,可能包含空格,而第二个字段中的筛选条件正好是5位,那么尝试如下:
awk -F'|' '$2 ~ /^[ ]*[0-9]{5}[ ]*$/' file此外,要通过标头(第一行),另外:
awk -F'|' 'NR==1 || $2 ~ /^[ ]*[0-9]{5}[ ]*$/' file发布于 2017-07-04 08:02:01
选项以支持正则表达式中的区间表达式。
gawk --re-interval -F'|' '$NF~/^[0-9]{4,5}$/' filehttps://stackoverflow.com/questions/44892071
复制相似问题