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
}
}
'
我有一个完整的文件,其中包含从下面的 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
}
}
'