我一直在搞乱awk并试图让bash更加舒服。我的问题是如何处理文本文件,如:
5555
5554 No-match
5555 Match1
2421 No-match
5552 No-match
5555 Match2
5555 Match3
扫描第一个记录中的第一个字段($ 1)(在本例中为5555),然后搜索每个剩余记录并打印第二个字段($ 2),如果$ 1匹配。这是我写的:
awk '{(NR==1)(id=$1) (NR>1)(if(id==$1))printf("%s\n",$2)}'
我无法找到在第一个记录之后测试所有记录的方法。我想:
(NR>1)(if(condition))(action)
会导致它执行我想要的记录> 1然而事实并非如此。任何帮助都会很棒!
答案 0 :(得分:2)
你非常接近。尝试:
awk 'NR==1{id=$1}NR>1&&id==$1{printf("%s\n",$2)}' file
答案 1 :(得分:1)
试试这个:
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)}
答案 2 :(得分:0)
awk 'NR==1{id=$1}; NR>1{ if ($1==id) {print $2 }}' TestFile
Match1
Match2
Match3