【问题标题】:return common fields in two files返回两个文件中的公共字段
【发布时间】:2010-09-30 09:17:13
【问题描述】:

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

例如:

  • 文件1

    苹果
    香蕉
    芒果
    马铃薯
    番茄

  • 文件 2

    苹果:水果
    茄子:蔬菜
    女士的手指:蔬菜
    橙色:水果
    番茄:蔬菜
    马铃薯:蔬菜

生成的文件应如下所示:

苹果:水果
番茄:蔬菜
马铃薯:蔬菜

对此的任何想法将不胜感激

谢谢

【问题讨论】:

    标签: awk unix


    【解决方案1】:

    无需排序(更少的进程创建)

    $ awk -F":" 'FNR==NR{f[$0];next}($1 in f)' file file2
    apple:fruit
    tomato: vegetable
    potato: vegetable
    

    【讨论】:

      【解决方案2】:

      在 Bash、ksh、zsh 中:

      join -t: <(sort file1) <(sort file2)
      

      在其他 shell 中,您需要对文件进行预排序。

      【讨论】:

        【解决方案3】:
        grep "$(cat file1.txt)" file2.txt
        

        【讨论】:

        • grep -f file1.txt file2.txt
        • @Shruti:你用的是什么外壳?我在 bash 4.1.5 中做到了,并且成功了。
        • 我正在使用 C shell 我也在 bash 中尝试过,我得到了同样的错误
        • @Shruti:Alberto 的版本在 csh 中不起作用,但我评论中的版本应该。您也可以在 Alberto 的版本上尝试这种变体:grep "`cat file1.txt`" file2.txt。如果你在 Bash 中遇到这个错误,那就太奇怪了。
        • 使用 grep 可能不合适,因为 grep 会找到模式的整行。
        猜你喜欢
        • 1970-01-01
        • 2016-11-21
        • 1970-01-01
        • 2017-07-25
        • 2023-04-10
        • 1970-01-01
        • 2010-11-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多