파일 이름을 고유하게 정렬

파일 이름을 고유하게 정렬

솔루션을 검색했지만 내 문제에 대한 답을 찾을 수 없습니다.

내 디렉토리에는 수천 개의 파일이 있습니다. 파일 이름은 다음 형식입니다.

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

관련 정보