假设我有两个文件,我想找到可以用 grep 完成的再见,但我遇到的困难是一旦我发现再见与文件 1 的第一列相匹配。
文件1
sss aa 0030 asa bb 0040
文件2
Hello, goodbye sjkd askdfj al;j asa but no I dont need this sfajkld goodbye sjakdlfja sss saklfj alkjfalskj
就像是
if(line has goodbye && nextline has first column in file 1) print the second column in file 1
答案1
尝试这个:
awk '
NR==FNR { a[$1] = $2 ; next }
c && c-- && ($1 in a) { print a[$1] }
/goodbye/ { c = 1 }
' File1 File2
这是如何运作的:
NR==FNR
是仅在读取第一个文件时才成立的条件;这里,我们将第二个字段存储在第一个字段定义的键值下的映射中。使用该next
语句,不会检查第一个数据文件的其他后续条件。
因此,仅针对第二个文件检查其余条件。如果某些条件成立,我们希望打印第一个文件中的映射值(取决于第二个文件的键);已设置标志c
(如果是这样,该标志将递减为 0),并且当前键值必须已作为键(来自第一个文件)存在于 map 中a
。最后,c
如果给定模式匹配的条件为真,则将设置标志。