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