Linux處理求兩個檔案交集 差集

2021-08-21 01:45:27 字數 2487 閱讀 4001

兩個檔案,如:

[root@localhost grep]# cat 1.txtab

cadaa

bbaa

[root@localhost grep]# cat 2/txtab

cbbfsx

分析,檔案1.txt和檔案2.txt:

1.txt - 2.txt

(a) d aa (aa)

2.txt - 1.txt

fsx1.txt 交 2.txt

a b c bb

name

comm - compare two sorted files line by line

​synopsis

comm [option]... file1 file2

​description

compare sorted files file1 and file2 line by line.

comm命令比較兩個檔案差異和交集,並輸出為三列,第一列為file1-file2、第二列為file2-file1、第三列為file1和file2的交集。

comm命令要求檔案內容必須是排序的且唯一的

直接使用comm命令,如果檔案內容沒有排序或者內容不唯一,則會有提示

[root@localhost grep]# comm 1.txt 2.txt ab

cabbd

comm: file 1 is not in sorted order

aabb

aafsx

使用sort進行先排序,在比較

[root@localhost grep]# comm <(sort 1.txt) <(sort 2.txt)aa

aaaabbb

cdfsx第一列:1.txt比2.txt多的資料

第二列:2.txt比1.txt沒有的資料

第三列:1.txt和2.txt資料重疊的部分

使用uniq進行資料唯一化

[root@localhost grep]# comm <(sort 1.txt |uniq) <(sort 2.txt | uniq)aaa

bbbcd

fsx第一列:1.txt有而2.txt沒有的資料

第二列:2.txt有而1.txt沒有的資料

第三列:1.txt和2.txt資料重疊的部分

差集

name

grep, egrep, fgrep - print lines matching a pattern

​synopsis

grep [options] pattern [file...]

grep [options] [-e pattern | -f file] [file...]

​description

grep searches the named input files (or standard input if no files are

named, or if a single hyphen-minus (-) is given as file name) for lines

containing a match to the given pattern. by default, grep prints the

matching lines.

-f, --fixed-strings, --fixed-regexp

interpret pattern as a list of fixed strings, separated by

newlines, any of which is to be matched. (-f is specified by

posix, --fixed-regexp is an obsoleted alias, please do not use

it in new scripts.)將pattern解釋為由換行符分隔的固定字串列表,其中任何乙個將被匹配。

-f file, --file=file

obtain patterns from file, one per line.   the empty file

contains zero patterns, and therefore matches nothing. (-f is

specified by posix.)從file獲取模式,每行乙個。 空檔案包含零模式,因此不匹配任何內容。

-v, --invert-match

invert the sense of matching, to select non-matching lines. (-v

is specified by posix.),取反

取交集

[root@localhost grep]# grep -f -f 1.txt 2.txt | sort | uniqab

bbc​grep不要求排序,但是因為是集合操作,必須是唯一

取差集

Linux 兩個檔案求交集 並集 差集

sort a.txt b.txt uniq dsort a.txt b.txt uniq在 a.txt 檔案 現,不在 b.txt 檔案 現 sort a.txt b.txt b.txt uniq u在 b.txt 檔案 現,不在 a.txt 檔案 現 sort b.txt a.txt a.txt ...

Linux 兩個檔案求交集 並集 差集

一 交集 sort a.txt b.txt uniq d comm 12 sort a.txt uniq sort b.txt uniq 二 並集 sort a.txt b.txt uniq grep f f a.txt b.txt sort uniq 三 差集 a.txt b.txt sort a...

Linux 兩個檔案求交集 並集 差集

一 交集 sort a.txt b.txt uniq d 二 並集 sort a.txt b.txt uniq 三 差集 a.txt b.txt sort a.txt b.txt b.txt uniq u b.txt a.txt sort b.txt a.txt a.txt uniq u 四 相關的...