我有一个包含三列的大型 CSV 文件 (1.8 GB)。每行包含两个字符串和一个数值。问题是它们是重复的但被交换了。 示例:
Col1,Col2,Col3
ABC,DEF,123
ABC,EFG,454
DEF,ABC,123
所需的输出如下所示:
Col1,Col2,Col3
ABC,DEF,123
ABC,EFG,454
因为第三行包含与第一行相同的信息。
编辑
数据基本上是这样的(前两列是字符串,第三列是一个数值,4000万行):
请您参考如下方法:
你会处理 awk:
$ awk -F, '++seen[$3]==1' file
输出:
COL1,Col2,Col3
ABC,DEF,123
ABC,EFG,454
解释:
$ awk -F, ' # set comma as field delimiter
++seen[$3]==1 # count instances of the third field to hash, printing only first
' file
更新:
$ awk -F, '++seen[($1<$2?$1 FS $2:$2 FS $1)]==1' file
输出:
COL1,Col2,Col3
ABC,DEF,123
ABC,EFG,454
它对第一个和第二个字段的每个满足组合进行哈希处理,使得 "ABC,DEF"=="DEF,ABC"并计算他们只打印第一个。 ($1<$2?$1 FS $2:$2 FS $1) : 如果第一个字段小于第二个,哈希 1st,2nd否则散列 2nd,1st .
