Shell awk匹配两个文件中的关键字
我使用下面的命令来匹配两个文件中的关键字Shell awk匹配两个文件中的关键字,shell,awk,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 但是我没有得到想要的输出。正确的语法是什么 $ awk 'FNR==NR{ids[$0]=$0;next}{for(i
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
但是我没有得到想要的输出。正确的语法是什么
$ 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”
- 需要“\\y”
来表示\y
-请参阅
使用
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
选项,awk也将起作用
awk 'FNR==NR{r=(r?r"|":"")$0;next}FNR==1{r="(^| )("r")( |$)"}$0~r' f1 f2
测试结果:
$ cat f1
work
run
$ cat f2
I am running
I will run
$ awk 'FNR==NR{r=(r?r"|":"")$0;next}FNR==1{r="(^| )("r")( |$)"}$0~r' f1 f2
I will run
请注意\y
是特定于gawk的;它可能在其他awk实现中不起作用+1对于grep方法!请注意,这种方法要求用空格字符分隔单词;它不会找到我运行的,因此我是@RuudHelderman您是对的,它不匹配,但OP没有详细提到任何东西,可能是这个awk'FNR==NR{r=(r?r“|”):”$0;next}FNR==1{r=“(^[^[:alnum:])(([^[:alnum:].$)”}$0~r'f1
它会为您给定的字符串提供所需的o/p。