首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash I/O打印具有匹配字段的记录

Bash I/O打印具有匹配字段的记录
EN

Stack Overflow用户
提问于 2014-03-13 00:26:38
回答 3查看 54关注 0票数 1

我一直在使用awk,并试图更好地使用bash。我的问题是,我如何接收文本文件,例如:

代码语言:javascript
复制
5555
5554 No-match
5555 Match1
2421 No-match
5552 No-match
5555 Match2
5555 Match3

然后扫描第一条记录(在本例中为5555)上的第一个字段( $1 ),然后搜索剩余的每个记录,如果$1匹配,则打印第二个字段($2)。下面是我写的内容:

代码语言:javascript
复制
awk '{(NR==1)(id=$1) (NR>1)(if(id==$1))printf("%s\n",$2)}'

我很难找到一种方法来测试第一个记录之后的所有记录。我是这么想的:

代码语言:javascript
复制
(NR>1)(if(condition))(action) 

将导致它执行我想要的记录>1,但情况似乎并非如此。任何帮助都是最好的!

EN

回答 3

Stack Overflow用户

发布于 2014-03-13 00:44:49

你已经很接近了。尝试:

代码语言:javascript
复制
awk 'NR==1{id=$1}NR>1&&id==$1{printf("%s\n",$2)}' file
票数 2
EN

Stack Overflow用户

发布于 2014-03-13 00:41:17

试试这个:

代码语言:javascript
复制
awk 'NR==1 {id=$1} NR>1 {if (id==$1) printf("%s\n",$2)}'

Awk语句包含一个模式,然后是一个操作。操作应该放在大括号中。所以这里我们有两个语句。首先,如果我们在第一行,捕获第一个字段:

代码语言:javascript
复制
NR==1 {id=$1}

然后,在除第一行之外的每一行上,将第一个字段与捕获的值进行比较,如果匹配,则打印第二个字段:

代码语言:javascript
复制
NR>1 {if (id==$1) printf("%s\n",$2)}
票数 1
EN

Stack Overflow用户

发布于 2014-03-13 00:45:00

代码语言:javascript
复制
awk 'NR==1{id=$1}; NR>1{ if ($1==id) {print $2 }}' TestFile
Match1
Match2
Match3
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22357822

复制
相关文章

相似问题

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