计算具有唯一前缀的文件

时间:2014-06-17 01:14:59

标签: awk

我有一组看起来如下的文件。我正在寻找一种计算所有具有唯一前缀的文件的好方法,其中“prefix”由第二个连字符之前的所有字符定义。

0406-0357-9.jpg   0591-0349-9.jpg   0603-3887-27.jpg  59762-1540-40.jpg 68180-517-6.jpg
0406-0357-90.jpg  0591-0349-90.jpg  0603-3887-28.jpg  59762-1540-41.jpg 68180-517-7.jpg
0406-0357-91.jpg  0591-0349-91.jpg  0603-3887-29.jpg  59762-1540-42.jpg 68180-517-8.jpg
0406-0357-92.jpg  0591-0349-92.jpg  0603-3887-3.jpg   59762-1540-5.jpg  68180-517-9.jpg
0406-0357-93.jpg  0591-0349-93.jpg  0603-3887-30.jpg  59762-1540-6.jpg

3 个答案:

答案 0 :(得分:2)

这应该这样做:

ls *.jpg | cut -d- -s -f1,2 | uniq | wc -l

或者,如果您的前缀总是4位数,一个短划线,4位数,那么您不需要削减:

ls *.jpg | uniq -w9 | wc -l

答案 1 :(得分:2)

根据您实际想要输出的内容,其中任何一个都可能是您想要的:

ls | awk -F'-' '{c[$1"-"$2]++} END{for (p in c) print p, c[p]}'

ls | awk -F'-' '!seen[$1,$2]++{count++} END{print count+0}'

如果还有别的,请更新您的问题以显示您正在寻找的输出。

答案 2 :(得分:0)

解析ls(不好,但它看起来不会导致这些文件名出现问题), 使用awk将字段分隔符设置为- !seen[$1,$2]++)使用带有$1,$2的关联数组作为键并递增,然后检查该值是否等于0以确保它只打印一次(基于$1$2) 。
print在屏幕上打印:)

ls | awk 'BEGIN{FS="-" ; printf("%-20s%-10s\n","Prefix","Count")} {seen[$1"-"$2]++} END{ for (k in seen){printf("%-20s%-10i\n",k,seen[k])}}'

现在将基于带标题的前缀进行计数:)