我使用以下命令匹配来自两个文件的关键字
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
但我没有得到所需的输出。什么是正确的语法。
答案 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"
的内容
"\\y"
来代表\y
- 请参阅gawk manual - Escape Sequences 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