首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于邮政编码的打印名称

基于邮政编码的打印名称
EN

Stack Overflow用户
提问于 2017-10-09 11:29:24
回答 3查看 51关注 0票数 0

我有一个文本文件,格式如下:

代码语言:javascript
复制
29:Jan:Høiberg:Darres gate 22:0175:Oslo:69215348 

在此基础上,如果邮政编码从文本文件中的11、12或13开始,我想打印名字和姓氏。

对于linux来说,这是很新的,所以任何关于如何做到这一点的帮助都是很棒的。

在终点站做这个。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-10-09 13:16:04

有两种主要的“旧式UNIX”方法来解决这个问题。一种是全合一的awk方法,这是强大而干净的,但很少有人能流利地使用它。

另一种是管道-组合-文本-使用方法。

首先,我们要过滤掉你感兴趣的线路。我们可以将输出传输到另一个命令,以打印您想要的字段。

所以:

代码语言:javascript
复制
egrep '^([^:]*:){4}1[123]' file.txt

我使用了egrep而不是grep,因为它给了我们“重复4次”的{4}。所以这就是

  • ^ --线的开始
  • [^:]* -除“:”外,任何字符均为零或更多次出现
  • 后面跟着“:”
  • {4} -重复4次(注意()分组要重复的部分)
  • 后面跟着一个1
  • 其次是123 -- [123]

在添加下一步之前,先对数据进行测试;提取所需的部件。在您展示的注释中,您已经知道如何使用cut

代码语言:javascript
复制
egrep '^([^:]*:){4}1[123]' file.txt | cut -d: -f2,3
票数 1
EN

Stack Overflow用户

发布于 2017-10-09 12:26:19

这并不是最有效的方法,但会有效的,尽管有一点要注意的是,由于您没有在数据中指定哪个列表示邮政编码,所以我假设它是列5,即包含值0175的列,但是如果假定的列号不代表邮政编码,则可以相应地更改以下代码。在您的终端中运行此命令:

代码语言:javascript
复制
awk -F: 'IF match($5, /11.*/) > 0 || match($5, /12.*/) > 0 || match($5, /13.*/) > 0 {split($4, a, " "); print "Name is: ",$3, a[1], "with code:", $5}' persondata.txt

当在示例数据上运行时,persondata.txt

代码语言:javascript
复制
29:Jan:Høiberg:Darres gate 22:0175:Oslo:11215348 
29:Jan:f1:l1 gate 22:1175:Oslo:11215348 
29:Jan:f2:l2 gate 22:1275:Oslo:11215348 
29:Jan:f3:l3 gate 22:0175:Oslo:11215348 
29:Jan:f4:l4 gate 22:01375:Oslo:11215348 
29:Jan:f5:l5 gate 22:12:Oslo:11215348

产出如下:

代码语言:javascript
复制
Name is:  f1 l1 with code: 1175
Name is:  f2 l2 with code: 1275
Name is:  f4 l4 with code: 01375
Name is:  f5 l5 with code: 12

如果您只想打印名称,而不打印代码,那么将print "Name is: ",$3, a[1], "with code:", $5替换为print "Name is: ",$3, a[1];

希望它有帮助:)

票数 1
EN

Stack Overflow用户

发布于 2017-10-09 16:25:43

awk

代码语言:javascript
复制
$ awk -F: '$5~/1[123][0-9]*/ {gsub(/[ ].*/,"",$4); print $3,$4}' f1

如果您的第五个字段与这个regex匹配,那么打印名字$3和姓氏$4直到空格。

从@tkhurana96 96获取输入文件。谢谢

输入:

代码语言:javascript
复制
29:Jan:Høiberg:Darres gate 22:0175:Oslo:11215348 
29:Jan:f1:l1 gate 22:1175:Oslo:11215348 
29:Jan:f2:l2 gate 22:1275:Oslo:11215348 
29:Jan:f3:l3 gate 22:0175:Oslo:11215348 
29:Jan:f4:l4 gate 22:01375:Oslo:11215348 
29:Jan:f5:l5 gate 22:12:Oslo:11215348

输出

代码语言:javascript
复制
f1 l1
f2 l2
f4 l4
f5 l5
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46645373

复制
相关文章

相似问题

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