问题描述
输入是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 (将#修改为@)