我有两个文件file1是一个查询文件,file2是一个字典,每列1列。我想检查file1的元素是否存在于file2中,它应该给出1 else 0作为输出。
这就是我在做的事情:
#!/bin/bash
for i in `cat file1 `
do
cat file2 | awk '{ if ($1=="'$i'") print 1 ; else 0 }'>>output
done
请提出改进命令的建议
谢谢
答案 0 :(得分:5)
看起来整个脚本缩小为:
fgrep -f file1 file2 > output
我应该补充一点,如果你没有可用的fgrep,grep -F
通常都是一样的。
fgrep
(通常,grep -F
)通常使用Aho-Corisack字符串匹配算法实现,因此它通常比重复使用grep
快一点。要记住的一件事(这里不是完全明确,但似乎很可能)是f
中的fgrep
代表fixed
- 它可以快速匹配任何一个替代的固定字符串,但它根本不会
如果你需要RE匹配,你仍然可以使用grep的-f
选项,所以你得到:
grep -f file1 file2 > output
答案 1 :(得分:3)
一种方式:
file1
的内容:
monday
tuesday
wednesday
thursday
friday
saturday
sunday
file2
的内容:
tuesday
saturday
执行下一个awk
命令:
awk 'FNR == NR { f2[ $1 ] = 1; next } FNR < NR { print (($1 in f2) ? 1 : 0) >"output" }' file2 file1
output
的内容:
0
1
0
0
0
1
0