솔루션을 검색했지만 내 문제에 대한 답을 찾을 수 없습니다.
내 디렉토리에는 수천 개의 파일이 있습니다. 파일 이름은 다음 형식입니다.
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를 결정합니다. 에서와 같이 는 사용자 ID입니다 75308_1543942393359.txt
. 75308
따라서 위의 예에는 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