if else和awk ...在我的命令中需要修正

时间:2012-04-25 15:04:53

标签: bash awk

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

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

谢谢

2 个答案:

答案 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