shell文本去重

  • 1.单个文件去重
  • 2.两个文件的交集,并集
  • 求两个文件的并集
  • 求两个文件的交集
  • 求两个文件的差集
  • 3.两个文件合并
  • 上下合并
  • 左右合并
  • 4.多个文件合并去重


1.单个文件去重

参考:

# 将重复的多行变为一行
sort file |uniq

## uniq -u 只显示不重复的行
sort file |uniq -u



2.两个文件的交集,并集



求两个文件的并集

# 求两个文件的并集,如果有重复的行只保留一行
## sort 排序
## uniq 去重,重复的行只保留一行
cat file1 file2 | sort | uniq > result



求两个文件的交集

# 求两个文件的交集,即两个文件中都有的行
## uniq -d 只显示重复的行
cat file1 file2 | sort | uniq -d > result



求两个文件的差集

# 求两个文件的差集,即只有一个文件中有的行
## uniq -u 只显示不重复的行
cat file1 file2 | sort | uniq -u > result



3.两个文件合并



上下合并

# 以追加行的方式合并,如果file1有n行,file2有m行,result为n+m行
cat file1 file2 > result



左右合并

合并后一个文件的内容在左边,一个文件命令在右边

# 左右合并
paste file1 file2 > result



4.多个文件合并去重

# 例如有4个文件
nt.deny hk.deny jp1.deny jp2.deny

# 将4文件排序,去重,然后合并为一个新文件
sort nt.deny hk.deny jp1.deny jp2.deny |uniq > hosts.deny

# 将相同后缀的文件排序,去重,然后合并为一个新文件
sort *.deny |uniq > hosts.deny