创建两个文件,分别为a.txt和b.txt,它们所含内容分别为:
a.txt | b.txt |
---|---|
1-wfhune2-chdamnsbchj3-uyr92fiubkqw5-cgvdnsb | 2-djyv4-dvcahsgdb5-wvchdfyt |
命令 | diff a.txt b.txt | grep -f a.txt b.txt | grep -vf a.txt b.txt |
---|---|---|---|
解释 | 比较两个文件 | 取两个文件中都有的行 | 取b文件中有,但a文件中没有的行 |
结果 | 1,4c1,3< 1-wfhune< 2-chdamnsbchj< 3-uyr92fiubkqw< 5-cgvdnsb---> 2-djyv> 4-dvcahsgdb | 空 | 2-djyv4-dvcahsgdb5-wvchdfyt |
回顾一下两个文件中的内容,格式都是 x-yyyy这种格式,我们认为x为键,yyyy为值。现在我们只想比较x,而不关心yyyy。
该怎么办呢?
命令 | grep -vf <(cut -d - -f 1 a.txt) <(cat b.txt) | grep -vf <(awk -F"-" '{print $1}' a.txt) <(cat b.txt) |
---|---|---|
解释 | <() 用于命令嵌套。cut -d - -f 1 a.txt,其中参数-d 用于定义分隔符,参数-f 用于定义分割后要提取第几段文本。比如这里定义分隔符为"-",并提取分割后的第一段文本。 | 这里只是用awk命令替换了cut命令,作用相同。awk 的 -F参数用于定义分隔符,printf $X 提取分割后的第X段文本。 |
结果 | 4-dvcahsgdb | 4-dvcahsgdb |