请求:用Shell脚本/Python处理CSV,去重、统计并排序
处理CSV文件:去重、添加计数列、按计数排序
需求说明
需要对CSV文件完成以下操作:
- 移除第4列(num3)的重复项,保留每个num3对应的第一行
- 在末尾新增
count列,记录每个num3的重复次数 - 按
count列的数值降序排序,次数相同的保持原顺序
输入示例
id,num1,num2,num3 1,300,200,1121 2,300,190,1122 3,300,180,1123 4,300,170,1124 5,300,160,1125 6,300,150,1126 7,300,140,1127 8,300,130,1128 9,300,120,1129 10,300,195,1122 11,300,185,1122 12,300,175,1126 13,300,165,1122 14,300,155,1122 15,300,145,1122 16,300,135,1122
期望输出
id,num1,num2,num3,count 2,300,190,1122,7 6,300,150,1126,2 1,300,200,1121,1 3,300,180,1123,1 4,300,170,1124,1 5,300,160,1125,1 7,300,140,1127,1 8,300,130,1128,1 9,300,120,1129,1
方案1:Python实现
用Python内置的csv模块处理,逻辑清晰易维护:
import csv from collections import Counter # 统计num3的出现次数 num3_counts = Counter() with open('input.csv', 'r') as f: reader = csv.DictReader(f) for row in reader: num3_counts[row['num3']] += 1 # 提取唯一行并添加count列 unique_rows = [] seen_num3 = set() with open('input.csv', 'r') as f: reader = csv.DictReader(f) new_fieldnames = reader.fieldnames + ['count'] for row in reader: num3 = row['num3'] if num3 not in seen_num3: seen_num3.add(num3) row['count'] = str(num3_counts[num3]) unique_rows.append(row) # 按count降序排序 unique_rows.sort(key=lambda x: int(x['count']), reverse=True) # 写入结果文件 with open('output.csv', 'w', newline='') as f: writer = csv.DictWriter(f, fieldnames=new_fieldnames) writer.writeheader() writer.writerows(unique_rows)
说明
- 先用
Counter统计所有num3的出现频次 - 遍历原文件时用集合记录已处理的num3,只保留第一次出现的行
- 排序时将count转为整数,确保按数值大小降序排列
- 最后通过
DictWriter生成带新表头的结果文件
方案2:Shell脚本(awk实现)
适合Linux/macOS环境下快速处理,无需额外依赖:
#!/bin/bash # 统计num3的出现次数,存入临时文件 awk -F ',' 'NR>1 {count[$4]++}' input.csv > counts.tmp # 处理原文件:保留首次出现的num3,追加count列后排序 awk -F ',' ' BEGIN {OFS=","} NR==1 {print $0, "count"; next} NR==FNR {count[$1]=$2; next} !seen[$4]++ {print $0, count[$4]} ' counts.tmp input.csv | sort -t ',' -k5,5nr > output.csv # 清理临时文件 rm counts.tmp
说明
- 第一行awk统计num3的次数,结果存到临时文件
counts.tmp - 第二行awk分两次读取:先加载计数数据,再遍历原文件输出唯一行并追加count值
sort -t ',' -k5,5nr指定按第5列(count)数值降序排序- 最后删除临时文件,避免残留
内容的提问来源于stack exchange,提问作者xsukax
相关产品推荐
相关产品推荐

