解決策を検索しましたが、私の問題に対する答えが見つかりませんでした。
私のディレクトリには何千ものファイルがあります。ファイル名は次の形式です。
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