如何使用Shell脚本删除输出中第二列重复值对应的行
两列内容按第二列去重Shell实现方案
实现命令
直接使用awk单行命令即可完成需求,支持直接处理文件或者管道输入:
# 处理本地文件 awk '!seen[$2]++' your_file.txt # 处理管道输入场景(前序命令的输出可直接接该命令去重) cat your_file.txt | awk '!seen[$2]++'
命令说明
- 核心利用
awk的关联数组特性:seen是自定义数组,以第二列$2作为数组的键 - 首次遇到某第二列值时,
seen[$2]默认值为0,!seen[$2]判断结果为真,当前行直接输出,随后seen[$2]自增为1 - 后续再遇到相同的第二列值时,
seen[$2]已经≥1,!seen[$2]判断结果为假,当前行不会被输出,最终仅保留第二列值首次出现的行
适配特殊分隔符场景
如果内容不是默认空白分隔(比如逗号分隔的CSV文件),可通过-F参数指定分隔符:
# 适配逗号分隔文件 awk -F ',' '!seen[$2]++' your_csv_file.csv
效果验证
针对示例输入运行上述命令后,输出完全符合预期:
1 Sample1 1 Sample2 1 Sample3 3 Sample4
内容的提问来源于stack exchange,提问作者Nika
相关产品推荐
相关产品推荐

