如何按列去除重复数据(linux)

背景

1
2
3
将oui.csv文件内容导入数据库,将Assignment字段作为主键,
发现该列数据有重复,导入失败,
需要对该文件按指定列进行去重在进行导入。

文件内容如下,展示10行

1
2
3
4
5
6
7
8
9
10
Registry,Assignment,Organization Name,Organization Address
MA-L,E043DB,Shenzhen ViewAt Technology Co.,Ltd. ,9A,Microprofit,6th Gaoxin South Road, High-Tech Industrial Park, Nanshan, Shenzhen, CHINA. shenzhen guangdong CN 518057
MA-L,2405F5,Integrated Device Technology (Malaysia) Sdn. Bhd.,Phase 3, Bayan Lepas FIZ Bayan Lepas Penang MY 11900
MA-L,3CD92B,Hewlett Packard,11445 Compaq Center Drive Houston US 77070
MA-L,9C8E99,Hewlett Packard,11445 Compaq Center Drive Houston US 77070
MA-L,B499BA,Hewlett Packard,11445 Compaq Center Drive Houston US 77070
MA-L,1CC1DE,Hewlett Packard,11445 Compaq Center Drive Houston US 77070
MA-L,3C3556,Cognitec Systems GmbH,Großenhainer Str. 101 Dresden Saxony DE 01127
MA-L,0050BA,D-Link Corporation,2F, NO. 233L-2, PAO-CHIAO RD. TAIPEI TW 0000
MA-L,00179A,D-Link Corporation,No. 289, Sinhu 3rd Rd., Neihu District, Taipei TW 114

使用sort命令,重复数据仅保留一行

1
sort -t ',' -k 2,2 -u oui.csv

说明

1
2
3
-t 指定分隔符
-k 指定某列
-u 去重

使用sort+uniq命令,去除重复数据

1
sort -t ',' -k 2,2 oui.csv.f|uniq -s 5 -w 6 -u

说明

1
2
3
-s 跳过字符数
-w 比较几位字符数
-u 去重

显示重复数据详情

1
sort -t ',' -k 2,2 oui.csv.f|uniq -s 5 -w 6 -D

内容

1
2
3
4
5
MA-L,0001C8,CONRAD CORP.,     
MA-L,0001C8,THOMAS CONRAD CORP.,1908-R KRAMER LANE AUSTIN TX US 78758
MA-L,080030,CERN,CH-1211 GENEVE 23 CH SUISSE/SWITZ
MA-L,080030,NETWORK RESEARCH CORPORATION,2380 N. ROSE AVENUE OXNARD CA US 93010
MA-L,080030,ROYAL MELBOURNE INST OF TECH,GPO BOX 2476V MELBOURNE VIC AU 3001

说明

1
-D 显示详细重复数据

显示重复数据及出现次数

1
sort -t ',' -k 2,2 oui.csv.f|uniq -s 5 -w 6 -cd

内容

1
2
2 MA-L,0001C8,CONRAD CORP.,     
3 MA-L,080030,CERN,CH-1211 GENEVE 23 CH SUISSE/SWITZ

说明

1
2
-c 次数
-d 显示重复数据仅一条

原始文件 oui.csv

作者

苏同

发布于

2017-09-19

更新于

2017-09-19

许可协议