WNJXYK
Thanks to the cruel world.
WNJXYKのBlog
Linux 获取文本内/目录下所有文件名字的字母出现频次
Linux 获取文本内/目录下所有文件名字的字母出现频次

题目大意

在Linux系统里,使用Bash统计一个目录下的所有文件名称中的拉丁字母出现频次,并且从大到小排序输出前五。(顺手也完成了统计一个文件内的所有拉丁字母出现的频次,排序统计前五)

实现方法

使用递归,循环遍历所有文件夹,获得所有文件的名称。
然后使用cut指令取出单个字符并判断是否为字母,如果是字符,就输出到help.txt中。
接下来,读取help.txt中的所有内容,对其进行排序、统计,最后取出现频次最高的五个。

实现代码

#!/bin/bash

function isChar(){
    case "$1" in 
        [a-z]|[A-Z])
            return 1;
        ;;
        *)
            return 0;
        ;;
    esac
}

function putchar2Help(){
    name=$(echo $1 | tr [A-Z] [a-z]) 
    for i in `seq 1 ${#name}`; do
        alpha=`echo $name | cut -c $i`
        isChar $alpha
        flag=$?
        if [ $flag -eq 1 ]; then 
            echo "$alpha" >> help.txt
        fi
    done
}

function getFileNameChars(){
    for file in `ls $1`; do
        if [ -d $1"/"$file ]; then
            getFileNameChars $1"/"$file
        else
            name=`basename $file`
            putchar2Help $name
        fi
    done
}

function getFileContentChars(){
    cat $1 | while read line; do
        putchar2Help $line
    done
}

cat /dev/null > help.txt # Clear Help.txt
# getFileContentChars "123.txt" # Stat Chars in Txt
# getFileNameChars "/usr/share/file/magic" # Stat Chars in Filenames
cat help.txt | sed -r 's/[ \t]+//g'|grep -v ^$|sort|uniq -c |sort -nr | head -n 5 # Get Top 5 Char
赞赏
首页      开发      Linux 获取文本内/目录下所有文件名字的字母出现频次
https://secure.gravatar.com/avatar/f83b57c055136369e9feba5d6671d6b5?s=256&r=g

WNJXYK

文章作者

一个蒟蒻

推荐文章

发表评论

textsms
account_circle
email

WNJXYKのBlog

Linux 获取文本内/目录下所有文件名字的字母出现频次
题目大意 在Linux系统里,使用Bash统计一个目录下的所有文件名称中的拉丁字母出现频次,并且从大到小排序输出前五。(顺手也完成了统计一个文件内的所有拉丁字母出现的频次,排序统计前…
扫描二维码继续阅读
2018-10-30
<--! http2https -->