请帮助我在Unix脚本中提供以下逻辑的解决方案
例如:
* 原始文件数据(关键字段为ID,Full_Name&年龄)*
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
答案 0 :(得分: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