01.找出文件中最长的字符串

01、从多个文件中找出每个文件中最长的字符串,输出该字符串和长度 #

思路:
1、如何实现多个文件输入
2、如何获取文件中的每个字符串
3、如何计算每个字符串的长度
4、如何去找出最长的字符串
5、如何将最长字符串及具体长度输出

下面一层一层来解决
1)多个文件输入可以使用for循环来解决,代码如下

for i
do
    # 循环具体内容   
    shift   
done

shift的作用是将位置参数往前传递,这样可以依次传入多个文件,并最后结束循环

2)获取文件中的每个字符串

for j in $(strings $i)
do
    # 循环内容
done

3)计算每个字符串长度

for j in $(strings $i)
do
    long=(echo $j | wc -c)
done

4)找出最长字符串

init_long=
init_name=
for j in $(strings $i)
do
    long=(echo $j | wc -c)
    if [ ${init_long} -lt $long ];then
        init_long=$long
        init_name=$j
    fi
done

5)输出最长字符串名字和长度

init_long=
init_name=
for j in $(strings $i)
do
    long=(echo $j | wc -c)
    if [ ${init_long} -lt $long ];then
        init_long=$long
        init_name=$j
    fi
done
echo "最长字符串:${init_name},长度为:${init_long}"

最后汇总完整代码

for i
do
    init_long=
    init_name=
    for j in $(strings $i)
    do
        long=(echo $j | wc -c)
        if [[ "${init_long}" -lt "${long}" ]];then
            init_long=$long
            init_name=$j
        fi
    done
    echo "最长字符串:${init_name},长度为:${init_long}"
    shift   
done

因为bash里一切皆为字符,在比较纯数字时需要通过[[]]来使得里面的变量可以当作整数来使用,当然也可以使用(( init_long < long ))来代替,wc -c计算的是字符串所占的字节数


上面的脚本有一个地方是没有考虑到的,如果文件中存在多个与找出的字符串长度一样的字符串,就会存在bug,举个例子
abc.txt文件中有单词a ab abc cdf
使用上面的脚本执行后找出的最长字符串是abc,但事实上cdf也是最长的,这里就缺失了一个字符串

如何解决这个问题呢?
思路:
1、按照上面的脚本找出第一个最长的字符串的名字和长度
2、多个文件输入
3、找出和1中长度一样的字符串名字
4、将找出来的字符串输出

下面我们另开一个脚本,来筛选出具有同样长度的字符串
下面一层一层解决

1)找出第一个最长的字符串长度
直接赋值即可
init_long=5

2)多个文件输入

for p 
do
    # 循环内容
    shift
done

3)找出和1中长度一样的字符串名字

>same.txt
init_long=4
for q in $(strings $p)
do
    long=$(echo $q | wc -c)
    if [[ ${long} -eq ${init_long} ]];then
        echo $q  | grep -h '[^abc]'> same.txt 
    fi
done

因为可能存在多个符合条件的字符串,所以这里将其名字输入到一个临时文件same.txt, [^abc]排除abc,因为这是已经在1中找出的最长字符串

4)找出来的字符串输出
echo -e “\n” “$p中还有符合最长条件的字符串:”
echo $(cat same.txt)

汇总代码

#!/bin/bash

for p
do
    > same.txt
    init_long=5
    for q in $(strings $p)
    do
        long=$(echo $q | wc -c)
        if [[ ${long} -eq ${init_long} ]];then
            echo $q | grep -h '[^abc]' >> same.txt
        fi
    done
    echo -e "\n" "$p还有符合的最长要求的字符串有:"
    echo $(cat same.txt)
    shift
done

⬅️上一页

下一页➡️

Edit Edit this page
本站总访问量:  次 您是本站第  位访问者