我一直在使用awk,并试图更好地使用bash。我的问题是,我如何接收文本文件,例如:
5555
5554 No-match
5555 Match1
2421 No-match
5552 No-match
5555 Match2
5555 Match3然后扫描第一条记录(在本例中为5555)上的第一个字段( $1 ),然后搜索剩余的每个记录,如果$1匹配,则打印第二个字段($2)。下面是我写的内容:
awk '{(NR==1)(id=$1) (NR>1)(if(id==$1))printf("%s\n",$2)}'我很难找到一种方法来测试第一个记录之后的所有记录。我是这么想的:
(NR>1)(if(condition))(action) 将导致它执行我想要的记录>1,但情况似乎并非如此。任何帮助都是最好的!
发布于 2014-03-13 00:44:49
你已经很接近了。尝试:
awk 'NR==1{id=$1}NR>1&&id==$1{printf("%s\n",$2)}' file发布于 2014-03-13 00:41:17
试试这个:
awk 'NR==1 {id=$1} NR>1 {if (id==$1) printf("%s\n",$2)}'Awk语句包含一个模式,然后是一个操作。操作应该放在大括号中。所以这里我们有两个语句。首先,如果我们在第一行,捕获第一个字段:
NR==1 {id=$1}然后,在除第一行之外的每一行上,将第一个字段与捕获的值进行比较,如果匹配,则打印第二个字段:
NR>1 {if (id==$1) printf("%s\n",$2)}发布于 2014-03-13 00:45:00
awk 'NR==1{id=$1}; NR>1{ if ($1==id) {print $2 }}' TestFile
Match1
Match2
Match3https://stackoverflow.com/questions/22357822
复制相似问题