对文件名进行唯一排序

对文件名进行唯一排序

我已经寻找解决方案,但找不到我的问题的答案。

我的目录中有数千个文件。文件名采用以下格式

74687_1543944930857.txt
74687_1543945090451.txt
74687_1543945278047.txt
74687_1543945465203.txt
75282_1543964541818.txt
75282_1543964595523.txt
75308_1543941117138.txt
75308_1543941398049.txt
75308_1543941677699.txt
75308_1543942393359.txt

在这些文件名中,前面的数字_(下划线)决定了用户的 ID。与 中一样75308_1543942393359.txt75308是用户 ID。因此,在上面的示例中有 3 个用户,即。74687, 75282 and 75308

如何知道目录中的用户总数?

答案1

只需将您的输出传递给grep然后sort

ls -1 | grep -oP "^\d+" | sort | uniq -c

现在,您已获得带有用户 ID 及其计数的排序数据。

答案2

用于printf列出每个目录内的文件并awk唯一标识用户 ID

shopt -s nullglob
printf '%s\n' *.txt | awk -F_ '!unique[$1]++ { print $1 }'

并单独打印计数,执行

printf '%s\n' *.txt | awk -F_ '!unique[$1]++ { count++ } END { print count }'

答案3

zsh

$ typeset -A count
$ for f (<->_*.txt(N)) ((count[${f%%_*}]++))
$ echo $#count users
3 users
$ printf '%s: %s\n' ${(kv)count}
74687: 4
75308: 4
75282: 2

相关内容