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

Ang*_*elo 2 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 
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Jer*_*fin 5

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

fgrep -f file1 file2 > output
Run Code Online (Sandbox Code Playgroud)

我应该补充说,如果你没有fgrep可用,grep -F通常是相同的.

fgrep(或者,通常情况下grep -F)通常使用Aho-Corisack字符串匹配算法实现,因此它通常比grep重复使用快得多.要记住的一件事(这里并不完全清楚,但似乎很可能)是fin fgrep代表fixed- 它很快就匹配了许多替代固定字符串中的任何一个,但它根本与RE相关 -每个字符串都是字面上匹配的.

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

grep -f file1 file2 > output
Run Code Online (Sandbox Code Playgroud)