awk匹配两个文件中的关键字

时间:2018-01-29 11:32:34

标签: shell awk

我使用以下命令匹配来自两个文件的关键字

awk 'FNR==NR{ids[$0]=$0;next}{for(id in ids){if($0 ~ /\yid\y/){print}}}' file1.txt file2.txt

file1.txt

的内容
work
run

FILE2.TXT

I am running
I will run

期望的输出:

I will run

但我没有得到所需的输出。什么是正确的语法。

3 个答案:

答案 0 :(得分:1)

$ awk 'FNR==NR{ids[$0]=$0;next}{for(id in ids){if($0 ~ "\\y"id"\\y"){print}}}' file1.txt file2.txt
I will run
  • /\yid\y/表示匹配整个单词id,而不是id变量的内容
  • "\\y"id"\\y"是三个字符串的串联 - "\\y"id变量和"\\y"的内容
  • 注意 FNR==NR{ids[$0];next}也可以使用,无需分配值,因为只需要密钥


使用grep

的替代解决方案
$ grep -Ff file1.txt file2.txt
I am running
I will run
$ # -w option ensures to match only whole words
$ grep -wFf file1.txt file2.txt
I will run

仅在您需要按字面意义匹配字符串

时才使用-F选项

答案 1 :(得分:0)

对于awk以下的给定输入,也可以使用

import {<something>} from 'rxjs';

测试结果:

awk 'FNR==NR{r=(r?r"|":"")$0;next}FNR==1{r="(^| )("r")( |$)"}$0~r' f1 f2

答案 2 :(得分:0)

关注awk可能对您有所帮助,这应该确保只从这两个文件中匹配确切的文本。

awk 'FNR==NR{a[$0];next} {for(i=1;i<=NF;i++){if($i in a){print;next}}}' FiLE1.txt  FiLE2.txt

输出如下。

I will run