我已经寻找解决方案,但找不到我的问题的答案。
我的目录中有数千个文件。文件名采用以下格式
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.txt
,75308
是用户 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