我有两个文件 file1 是一个查询文件,而 file2 是一种字典,每一列都有。我想检查 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
请提出改进命令的建议
谢谢
看起来您的整个脚本简化为:
fgrep -f file1 file2 > output
我应该补充一点,如果您没有可用的 fgrep,grep -F
通常是相同的。
fgrep
(或者,通常,grep -F
)通常是用 Aho-Corisack 字符串匹配算法实现的,所以它通常比grep
重复使用要快很多。要记住的一件事(这里并不完全清楚,但似乎很可能)是f
infgrep
代表fixed
- 它可以快速匹配许多替代固定字符串中的任何一个,但它根本不匹配REs -每个字符串都按字面意思简单匹配。
如果你需要 RE 匹配,你仍然可以使用-f
grep 的选项,所以你会得到:
grep -f file1 file2 > output
单程:
内容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