Bash 脚本中的排序问题

Sorting issue in Bash Script

我有一个完整的文件,其中包含从下面的 find 命令输出的文件名:

find "$ARCHIVE" -type f -name *_[0-9][0-9] | sed 's/_[0-9][0-9]$//' > temp

我现在正在尝试对这些文件名进行排序并对其进行计数,以找出出现次数最多的一个。我遇到的问题是每当我执行时:

sort -g temp

它将所有排序的文件名打印到命令行,我不确定为什么。非常感谢对此问题的任何帮助!

您可能需要这个:

sort temp| uniq -c | sort -nr

首先我们sort temp,然后我们在行前面加上出现的次数(uniq -c),接下来我们根据字符串数值(sort -n)和最后一个命令反转比较结果 (sort -r).


示例文件:

/home/user/testfiles/405/prob405823
/home/user/testfiles/405/prob405823
/home/user/testfiles/527/prob527149
/home/user/testfiles/518/prob518433

输出:

  2 /home/user/testfiles/405/prob405823
  1 /home/user/testfiles/527/prob527149
  etc..

资源:

Linux / Unix Command: sort
uniq(1) - Linux man page
ptierno - comments to improve answer

您可以在一个 awk 命令中执行 find 之后的所有操作(此命令使用 GNU awk 4.*):

find "$ARCHIVE" -type f -name *_[0-9][0-9] |
awk '
{ cnt[gensub(/_[0-9][0-9]$/,"","")]++ }
END {
    PROCINFO["sorted_in"] = "@val_num_desc"
    for (file in cnt) {
        print cnt, file
    }
}
'