我有一组看起来如下的文件。我正在寻找一种计算所有具有唯一前缀的文件的好方法,其中“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
答案 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])}}'
现在将基于带标题的前缀进行计数:)