【awk】如何用shell命令按行内容去重?

要按行内容去重 file.csv 文件(保留唯一行),可以使用以下任一方法:

方法1:使用 awk(推荐,保持原始顺序)

awk 'NR==1 {print; next} !seen[$0]++' file.csv

说明

  • NR==1 先打印标题行
  • !seen[$0]++ 对后续行去重,保留首次出现的行
  • 优点:保持非重复行的原始顺序

方法2:使用 sort + uniq(改变行顺序)

(head -n 1 file.csv; tail -n +2 file.csv | sort -u)

说明

  • head -n 1 提取标题行
  • tail -n +2 跳过标题行处理剩余内容
  • sort -u 排序并去重
  • 注意:会按字母顺序重新排列数据行

输出效果(示例):

name,jobNo,userId,deviceId
马克尔,Michael,xxxxx,xxxxxx

验证结果:

# 查看去重后总行数(标题+1行数据)
awk 'NR==1 {print; next} !seen[$0]++' file.csv | wc -l

重要提示:

  • 如果数据中有空格或特殊字符,上述命令仍可安全处理
  • 如需按特定列去重(而非整行),需修改 awk$0 为列号(如 $1,$2
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容