2

我有两个文件 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 

请提出改进​​命令的建议

谢谢

4

2 回答 2

5

看起来您的整个脚本简化为:

fgrep -f file1 file2 > output

我应该补充一点,如果您没有可用的 fgrep,grep -F通常是相同的。

fgrep(或者,通常,grep -F)通常是用 Aho-Corisack 字符串匹配算法实现的,所以它通常比grep重复使用要快很多。要记住的一件事(这里并不完全清楚,但似乎很可能)是finfgrep代表fixed- 它可以快速匹配许多替代固定字符串中的任何一个,但它根本匹配REs -每个字符串都按字面意思简单匹配。

如果你需要 RE 匹配,你仍然可以使用-fgrep 的选项,所以你会得到:

grep -f file1 file2 > output
于 2012-04-25T15:26:05.847 回答
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
于 2012-04-25T15:18:59.113 回答