Linux系统sort和uniq命令联合使用

Linux系统sort和uniq命令联合使用,第1张

给定两个文件 a.txt 和 b.txt ,每行是一个记录(假设没有重复),要求输出两集合的交集、并集、差集,输出的结果只包括唯一项。

交集定义为同时出现在两个文件中的记录项;

并集定义为出现在任何一个文件中的记录项;

差集( A-B )定义为出现在A中而且不出现在B中的记录;

对称差集定义为只出现在一个文件中的记录;

假设 a.txt 包括 a, c, b 三行。假设 b.txt 包括 d, e, c, b 四行。

交集 ,把两个文件放到一起排序,只输出次数多于一次的项:

$ sort a.txt b.txt | uniq -d

并集 ,把两个文件放到一起排序,重复的项只算一次:

$ sort a.txt b.txt | uniq

差集(A-B) ,把B的元素重复2份和A的元素放到一起排序,只输出出现一次的项:

$ sort a.txt b.txt b.txt | uniq -u

对称差 ,把两个文件放到一起排序,只输出出现一次的项:

$ sort a.txt b.txt | uniq -u

指定分隔符(-t)及基于哪一列(-k)、基于数值(-n) 、逆序(-r)进行排序

#排序之后删除了重复行,同时在行首位置输出该行重复的次数:

执行命令:sort testfile | uniq -c ,输出结果如下

#仅显示存在重复的行,并在行首显示该行重复的次数:

执行命令:sort testfile | uniq -dc,输出结果如下

#仅显示没有重复的行:

执行命令:sort testfile | uniq -u,输出结果如下

ref: Linux diff --比较两个文件并输出不同之处 - 老莫小小朋友 - CSDN博客

两个文件必须是排序和唯一(sorted and unique)

默认输出为三列,第一列为是A-B,第二列B-A,第三列为A交B

aaa.txt的差集 -2 -3 参数

bbb.txt的差集 -1 -3 参数

ref: 如何求两个文件的交集、并集和差集?------sort和uniq闪亮登场 - stpeace的专栏 - CSDN博客

交集:

并集:

差集:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

#!/bin/bash

# 定义目录变量,便于引用

A=/tmp/A

B=/tmp/B

C=/tmp/C

# 显示B目录文件,按列显示,便于for循环时按行读取

ls "$B"|awk '{print $n}' >line

# 主程序

for filename in `cat line`

do

# ! -f 判断文件名 -d 判断目录/ 是否在路径下存在,如果精确匹配需要用到md5sum!

if [ ! -f "$A"/"$filename" ]then

# 提示信息,可删除

echo $filename 在"$A"不存在,正复制到"$C"目录!

# cp -rf 在C目录不存在时直接创建

cp -rf "$B"/$filename "$C"

fi

done

# 清除生成的文件列表文件

rm -rf line

1

2

3

4

5

6

7

8

9

10

11

12

13

#!/bin/bash

A=/tmp/A

B=/tmp/B

C=/tmp/C

ls "$B"|awk '{print $n}' >line

for filename in `cat line`

do

if [ ! -f "$A"/"$filename" ]then

echo $filename 在"$A"不存在,正复制到"$C"目录!

cp -rf "$B"/$filename "$C"

fi

done

rm -rf line


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/9006229.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-23
下一篇 2023-04-23

发表评论

登录后才能评论

评论列表(0条)

保存