如何用tawk/awk基于多列组合去重?awk命令异常求助
解决方案
一、用tawk基于第二+第三列组合去重CSV
把原来单列去重的数组索引改成第二列和第三列的联合键即可,修改后的命令如下:
tawk -csv 'line {![info exists seen($F(2),$F(3))]} {set seen($F(2),$F(3)) 1; print}' inp.csv > out.csv
核心逻辑是将第二、第三列的组合作为数组seen的判断键,仅保留该组合首次出现的行。
二、修复awk处理竖线分隔文件的去重问题
你之前的命令出错,是因为竖线|是正则元字符,直接写*|*会被解析成“零或多个空格 或 零或多个空格”,而非“空格+竖线+空格”。需要转义竖线并明确分隔规则,修改后的命令:
awk -F ' *\\| *' '!uniq[$2,$3]++' test.csv > test_out.csv
如果文件中竖线前后无空格,可简化为-F '\\|'直接按竖线分割字段,再基于第二、第三列组合去重。
内容的提问来源于stack exchange,提问作者JohnJ
相关产品推荐
相关产品推荐

