【问题标题】:Comparing two files at end of line in Linux在 Linux 中比较行尾的两个文件
【发布时间】:2016-06-02 17:22:13
【问题描述】:

我想比较两个文件并在行尾的一个文件中获取匹配字符串的输出:

假设我有两个文件:-

文件1:

xyzabcdef
xyz
abcdefghi

文件2:

fghjkl
wertyu
abcdef

我可以这样做:

grep -Fif file2 file1

这给了我以下输出:

xyzabcdef
abcdefghi

这是因为 file2 中的 abcdef 匹配 file1 中的这两行。但是,我想要的只是将 file1 中的行尾与 file2 中的行尾进行比较。所以,我希望输出是:

xyzabcdef

有什么神奇的命令可以让我这样做吗?

【问题讨论】:

    标签: linux shell sed grep


    【解决方案1】:

    扩展 Lars 的解决方案,我认为这是最好的选择。只需使用以下内容:

    cat -E file2  | grep -if - file1 
    

    诀窍是使用cat-E 选项在每行末尾附加$。然后使用 grep 的 - 选项从标准输入读取模式。另外你必须使用正则表达式匹配,所以我删除了-F

    【讨论】:

    • 谢谢。所有答案实际上都有效,但这个似乎是最快的。
    【解决方案2】:

    我会将$ 附加到file2 的每一行并使用命令grep -if file2 file1

    $ 是一个正则表达式,意思是“在行尾匹配”。 -F 选项会使用与正则表达式不兼容的固定字符串模式,因此省略该选项。

    【讨论】:

      【解决方案3】:

      您只需阅读file2 中的每一行并将每一行用作grep 的搜索词,并使用$ 将该词锚定到行尾,例如:

      $ while read -r line; do grep "${line}$" file1; done <file2
      xyzabcdef
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-04-12
        • 2013-01-08
        • 2015-04-14
        • 2012-06-15
        • 1970-01-01
        • 1970-01-01
        • 2014-05-27
        • 1970-01-01
        相关资源
        最近更新 更多