如何保存文件b中存在的但不存在于文件a到文件c中的行,使用shell脚本?

时间:2016-07-29 06:22:43

标签: shell

如何保存文件 b 中但不存在于文件 a 中的文件 c 的行,请使用shell脚本,例如:

a.txt 中的内容:

abc    
123     
zxc   

b.txt

中的内容
rty   
fgh   
abc    
zxc   
456

文件 c.txt 中的结果:

rty   
fgh      
456

我尝试用join,sort,grep来处理它,但是无法工作。

2 个答案:

答案 0 :(得分:1)

回答第三版问题

在这个版本中,文件中有空格字符,我们想忽略它们:

$ grep -vwFf <(sed 's/[[:space:]]//g' a.txt2) b.txt2
rty   
fgh   
456

回答问题的第二个版本

$ grep -vxFf a.txt b.txt
rty
fgh
456

这将返回b.txt中不在a.txt

中的所有行

grep选项的含义是:

  1. 通常,grep会打印匹配的行。 -v告诉grep执行相反操作并仅打印不匹配的行。

  2. -x告诉grep匹配整行。

  3. -F告诉grep我们匹配固定字符串,而不是正则表达式。

  4. -f a.txt告诉grep从文件a.txt中获取要比较的行。

  5. 回答原始版本的问题

    版本1

      

    如何保存文件b中存在但在文件a到文件c中不存在的行

    这些是文件b中的行但不在文件中:

    $ grep -vxFf a.txt b.txt
    rty
    fgh
    ghj
    456
    

    这与您的样本输出不符。

    例如rty是“存在于文件b中但不存在于文件a中的行”。因此,它在输出中是正确的。

    版本2

    也许你的意思是你想要文件b中的行在文件a中。在那种情况下:

    $ grep -xFf a.txt b.txt
    abc
    zxc
    

    这与您的样本输出相匹配。

    将此保存在文件c.txt中:

    grep -xFf a.txt b.txt >c.txt
    

答案 1 :(得分:0)

使用moreutils中的合并:

b中的

中不存在
$ combine b not a > c
b和

中的

$ combine b and a > c