Shell Unix脚本-在多个dat文件中查找重复字符串
请帮助我提供以下逻辑的Unix脚本解决方案Shell Unix脚本-在多个dat文件中查找重复字符串,shell,unix,duplicates,Shell,Unix,Duplicates,请帮助我提供以下逻辑的Unix脚本解决方案 合并多个分隔的.dat文件,并将合并的文件放在tmp位置 需要根据主键字段在合并文件中标识重复项。在一行中,可能需要考虑三到四个关键字段NEE。其他行中键字段的组合也被称为重复项。此特定逻辑需要以可编辑的方式进行,因为关键字段因文件而异 位置重复输出文件需要放置在tmp位置 例如: *原始文件数据(关键字段为ID、全名和年龄)* ID|source_code|Full_Name|AGE 123|01|John|20 190|05|Mary|35
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
预期输出文件
将以下代码另存为
dups.py
,然后运行python dups.py
(这不是shell脚本。您需要python
才能运行。)
样本输出:
$ 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
$cat test.dat
ID |源代码|全名|年龄
123 | 01 |约翰| 20
190 | 05 |玛丽| 35
123 | 05 |约翰| 20
180 | 09 |约翰| 30
190 | 100 |接缝| 20
190 | 900 |杰克| 10
$python dups.py
尝试grep-c-n“123”原始文件>预期输出文件
#!/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