gawk:为1个或多个多字段文件模拟uniq -cd,合并重复的详细信息并使用计数和路径格式化输出

问题描述

输入是1个或多个文件,包含文件名列表及其路径,并用'/'分隔 (来自重新排列的ls / dir输出)

   file1 / path1
   file2 / path2
   file3 / path3
   file4 / path4
   file3 / path5
   ...

所需的输出类似,除了重复项,我希望它们的单独计数和关联的路径 (或者在同一行上,用“ /”分隔,或者在每个重复的文件名之后缩进):

1 / file1 / path1
1 / file2 / path2
2 / file3 / path3-1 / path3-2
1 / file4 / path4
...

1 / file1 / path1
1 / file2 / path2
2 / file3 / path3-1
            path3-2
1 / file4 / path4
...

现在我有一些大的awk混乱,至少它可以做些什么,但是我希望他们做的更简洁,轻巧,也许是更快的方式!因为我没有找到如何避免将所有行存储在tmp var中的方法...

gawk -F/ -v "tot=c" "{a[$1]++;l[$1]=$1;m[$1]=$2;if (a[$1]>1) m[$1]=m[$1]FS$2;} END {for (i in a) {print a[i],FS,l[i],m[i]; c+=a[i]};print c}" file1 file2 > out
              ^                                                    ^ here,it doesn't keep      ^
              ^                                                      prev path and add new      ^
              ^                                                                                 ^[*]                                                                              

因此,问题是保留重复的先前路径,并且仅在最后一次出现时才输出。

:[*]:另外: 添加的var c应该计算重复项的总数,如果我在星号位置添加'if(a [i]> 1)'(然后将其输出为最后一行),则可以这样做只打印胶印... 因此,比两次运行此命令更好,也许有人会一劳永逸地提出解决方案的:)

nb:
它们在路径中不是/,它们是Windows路径(文件名中也没有!)
但路径和文件名可以包含任何允许的花式字符(尤其是网页快捷方式)
在MSdos批处理中使用Gnuwin二进制文件,因此如有必要,将'替换为'&v / v

谢谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)