如何用Python 3.7.5找出另一CSV文件中不存在的行
找出pr.csv中独有的行并统计数量
方法一:使用awk(保留原行顺序)
直接用awk一次性处理两个文件,无需提前排序,能保留pr.csv中原有的行顺序:
awk -F'|' 'NR==FNR { if(NR>1) lines[$0]; next } { if(!($0 in lines)) { if(FNR==1) print; else { print; count++ } } } END { print "\npr.csv has", count, "rows extra" }' ua.csv pr.csv
命令说明:
-F'|':指定字段分隔符为竖线NR==FNR:处理第一个输入文件ua.csv时,将除表头外的所有行存入数组lines- 处理
pr.csv时:- 先输出表头(
FNR==1) - 若当前行不在
lines数组中,就输出该行并累加计数
- 先输出表头(
END块:最后输出额外行的统计结果
方法二:使用comm(需排序)
如果可以接受排序后的结果,用comm命令更简洁,步骤如下:
# 提取表头 head -1 pr.csv > header.tmp # 排序两个文件的内容(排除表头) tail -n +2 ua.csv | sort > ua_sorted.tmp tail -n +2 pr.csv | sort > pr_sorted.tmp # 获取pr.csv独有的行 comm -13 ua_sorted.tmp pr_sorted.tmp > extra_rows.tmp # 统计行数 extra_count=$(wc -l < extra_rows.tmp) # 输出结果 echo "pr.csv has $extra_count rows extra" echo cat header.tmp extra_rows.tmp # 清理临时文件 rm header.tmp ua_sorted.tmp pr_sorted.tmp extra_rows.tmp
命令说明:
comm -13:只显示第二个文件(pr_sorted.tmp)独有的行,-1隐藏第一个文件独有的内容,-3隐藏两个文件共有的内容- 通过临时文件分别处理表头、排序内容,最后组合输出结果
预期输出
pr.csv has 2 rows extra Name|Address|City|Country|Pincode Smoet|coffee shop|finland|Europe|3453335 Jack|long street|malasiya|Asia|585858
内容的提问来源于stack exchange,提问作者Enigmaderockz
相关产品推荐
相关产品推荐

