【发布时间】:2020-10-01 03:52:16
【问题描述】:
我之前的问题 (here) 有点复杂。
-
我需要根据代表 4:标识符、5:日期的第 4 列和第 5 列的组合来识别逗号分隔的文本文件中的重复条目。这两列可以简单地连接起来。
-
如果有重复,我需要根据另一列的子字符串进行检查,它表示一个 int 值。应保留具有较高值的副本。 创建子串示例:
cut -d"," -f14 file.txt | grep -o "N0[0-9]{3}" | sed 's/N0//g' -
如果 int 值相同,我需要根据代表日期的第 9 列执行另一次检查。应保留日期较晚的行。
示例数据:
xyz,xyz,xyz,X08ABC,20200804,xyz,xyz,xyz,2020-08-17T20:08:27.000000Z,xyz,xyz,xyz,xyz,long_string_N0809_bla
xyz,xyz,xyz,X08ABC,20200804,xyz,xyz,xyz,2020-09-25T16:18:43.000000Z,xyz,xyz,xyz,xyz,long_string_N0809_bla
在示例中,将保留第三列,而丢弃前两列。它们都是重复的(col4+col5 = 相同),第 14 列的 int 值在第 2 行和第 3 行最高,第 9 列中的日期在第 3 行比第 2 行晚。
如果我可以保持原始文件中的行顺序,那是一个加分项 - 但不是必须的。
编辑:如果这可以在 awk 中以某种可读的方式完成,那么拥有一个 awk 解决方案会很棒。我认为这是可能的,但我对 awk 中的多个操作感到非常困惑。
【问题讨论】: