0

请帮助我在 Unix 脚本中为以下逻辑提供解决方案

  1. 合并多个分隔的 .dat 文件并将合并的文件放在 tmp 位置
  2. 需要根据主键字段在合并文件中识别重复项。即在单行中可能需要考虑三到四个键字段。其他行中的关键字段的组合也称为重复项。由于关键字段因文件而异,因此该特定逻辑需要采用可编辑的方式。
  3. 位置重复的输出文件需要放在一个 tmp 位置

例如:

*原始文件数据(关键字段为 ID、Full_Name 和 Age)*

ID|source_code|Full_Name|AGE

123|01|John|20

190|05|Mary|35

123|05|John|20

180|09|John|30

190|100|Seam|20

190|900|Jack|10

预期的输出文件

123|John|20;2 Occurances;line no 1 & 3
4

1 回答 1

0

将以下代码另存为dups.py,然后运行python dups.py < merged_file.dat

(这不是 shell 脚本。您需要python运行。)

#!/usr/bin/env python

import sys
import collections

d = collections.defaultdict(list)
for lineno, line in enumerate(sys.stdin, start=0):
    row = line.strip().split('|')
    if len(row) == 4:
        key = '{0[0]}|{0[2]}|{0[3]}'.format(row)
        d[key].append(lineno)

for line in d:
    linenos = d[line]
    if len(linenos) > 1:
        print('{};{} Occurances;line no {}'.format(
            line, len(linenos), ' & '.join(map(str, linenos)))
        )

样本输出:

$ cat test.dat 
ID|source_code|Full_Name|AGE
123|01|John|20
190|05|Mary|35
123|05|John|20
180|09|John|30
190|100|Seam|20
190|900|Jack|10
$ python dups.py < test.dat
123|John|20;line no 1 & 3
于 2013-06-19T10:47:27.117 回答