Awk

對文件名進行唯一排序

  • December 5, 2018

我已經搜尋了解決方案,但找不到我的問題的答案。

我在一個目錄中有數千個文件。文件名採用以下格式

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。像 in 一樣75308_1543942393359.txt75308是使用者 ID。因此,在上面的範例中,有 3 個使用者,即。74687, 75282 and 75308.

如何知道目錄中的使用者總數?

只需將您的輸出傳遞給grep然後sort

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

現在,您獲得了帶有 USER ID 及其計數的排序數據。

用於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 }'

引用自:https://unix.stackexchange.com/questions/486075