鱼C论坛

 找回密码
 立即注册
查看: 3755|回复: 6

萌新求助!Linux shell 如何在txt文件中查找关键字并计算

[复制链接]
发表于 2020-11-15 07:20:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
新人求助!

学校习题 想要写一个shell, 查找以下名为class.txt文件内的人名,如果匹配到了的话就计算名字后面这一行的平均值, 如果没有的话就提示用户:没有这个人,有Ajax, Bob, Cathy, Diva.

Name Math Informatics Literature English
Ajax 3 5 1 3
Bob 2 4 6 8
Cathy 10 20 20 10
Diva 1 3 5 7


例子:

./average.sh Ajax => Ajax 3;
./average.sh Bob => Bob 5;
./average.sh Steven => 列表中没有Steven,有:Ajax, Bob, Cathy, Diva


下面是我目前的shell文件,只会写到这里……判断是否匹配,若匹配到之后的操作就不会了
<>#! /bin/bash


if grep -qrnw "$1" class.txt
then
        echo Yes
else
        echo No "$1" in the list, There are: `awk '{print $1 ", "}' class.txt`.
fi
<>

感谢回答!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-11-30 00:22:46 | 显示全部楼层
沉了……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-1-23 09:41:31 | 显示全部楼层
为什么不用python呢?
是技术必须要这个吗?
我也刚刚学shell,但是知道,间隔‘ ’,可以用linux,三神器,awk截取字符,if [] test进行判断
for line in `cat a.txt`
do
     echo $line
     sleep 1
done
进行行遍历
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-8 00:33:29 | 显示全部楼层
immotral 发表于 2021-1-23 09:41
为什么不用python呢?
是技术必须要这个吗?
我也刚刚学shell,但是知道,间隔‘ ’,可以用linux,三神器 ...

远古掘坟。。。
是的是必须要学。。。
感谢分享!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-2 17:07:59 | 显示全部楼层
#!/bin/bash
read -p "输入一个名字:" name
sf=$(grep "\b$name\b" /root/shell_test/class.txt)
echo $sf
if [[ -n $sf ]]

then
        echo $sf |awk -v sum=0 '{for(i=2;i<=NF;i++){sum+=$i}} END{print sum/(NF-1)}'
else
        echo "没有这个用户"
fi
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-9 10:38:56 | 显示全部楼层
引用楼上的代码稍微修改了下,请楼主参考
  1. #!/bin/bash
  2. curr_dir=$(pwd)
  3. read -p "请输入要查询的名字:" name
  4. #grep -w精确匹配人名
  5. sf=$(grep -w "$name" ${curr_dir}/class.txt)
  6. all_name=$(cat ${curr_dir}/class.txt |awk -F " " '{print $1}')
  7. if [[ -n $sf ]]
  8. then
  9.         average=$(echo $sf |awk -v sum=0 '{for(i=2;i<=NF;i++){sum+=$i}} END{print sum/(NF-1)}')
  10.         #根据楼主要求输出打印
  11.         echo "$name => $average"
  12. else
  13.         #找不到人名的时候给出列表哪些可以查
  14.         echo -e "没有${sf}这个用户,只能查找如下列表的人员:\n$all_name"
  15. fi
  16. ~   
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-28 13:21:50 | 显示全部楼层
#!/bin/bash

file="/root/shell/shell_txt/class.txt"
#read -p "输入名字:" name
num=$(cat ${file} |wc -l)
#awk 'NR>1{print $1}' $file
if [ $(awk 'NR>1{print $1}' $file |grep "${1}")  ]
then
        awk '$1=="'$1'"{for(i=2;i<=NF;i++) sum+=$i} END{print "'$1' "sum/(NF-1)}' $file
else
        echo "列表中没有${1},有:$(awk  'NR>1{if(NR=='$num') {printf $1} else {printf $1","}}' $file)"
fi
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 15:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表