Awk 返回两个文件中的公共字段

Awk 返回两个文件中的公共字段,awk,unix,Awk,Unix,我有两个文件,应该比较file1的第一列和file2的第一列,结果文件应该是file2 例如: 文件1 苹果 香蕉 芒果 土豆 西红柿 文件2 苹果:水果 布林加尔:蔬菜 女士手指:蔬菜 橙色:水果 番茄:蔬菜 土豆:蔬菜 结果文件应如下所示: 苹果:水果 番茄:蔬菜 土豆:蔬菜 如果您对此有任何想法,我们将不胜感激 感谢Bash、ksh、zsh中的: join -t: <(sort file1) <(sort file2) join-t:无需排序(减少进程创建) grep-f

我有两个文件,应该比较file1的第一列和file2的第一列,结果文件应该是file2

例如:

  • 文件1

    苹果
    香蕉
    芒果
    土豆
    西红柿

  • 文件2

    苹果:水果
    布林加尔:蔬菜
    女士手指:蔬菜
    橙色:水果
    番茄:蔬菜
    土豆:蔬菜

结果文件应如下所示:

苹果:水果
番茄:蔬菜
土豆:蔬菜

如果您对此有任何想法,我们将不胜感激

感谢Bash、ksh、zsh中的:

join -t: <(sort file1) <(sort file2)
join-t:无需排序(减少进程创建)


grep-f file1.txt file2.txt
@Shruti:你在用什么shell?我在Bash4.1.5中这样做了,并且成功了。我正在使用C shell,我也在bash中尝试过,我得到了同样的结果error@Shruti:Alberto的版本在csh中不起作用,但我评论中的版本应该起作用。您也可以在Alberto的版本上尝试此变体:
grep“`cat file1.txt`”file2.txt
。如果您在Bash中遇到这个错误,那将非常奇怪。使用grep可能不合适,因为grep找到了模式的全部行。
join -t: <(sort file1) <(sort file2)
$ awk -F":" 'FNR==NR{f[$0];next}($1 in f)' file file2
apple:fruit
tomato: vegetable
potato: vegetable