Dynamitemole 发表于 2020-11-15 07:20:36

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

新人求助!

学校习题{:5_104:} 想要写一个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
<>

感谢回答!

Dynamitemole 发表于 2020-11-30 00:22:46

{:10_266:}沉了……{:10_266:}

immotral 发表于 2021-1-23 09:41:31

为什么不用python呢?
是技术必须要这个吗?
我也刚刚学shell,但是知道,间隔‘ ’,可以用linux,三神器,awk截取字符,if [] test进行判断
for line in `cat a.txt`
do
   echo $line
   sleep 1
done
进行行遍历

Dynamitemole 发表于 2022-10-8 00:33:29

immotral 发表于 2021-1-23 09:41
为什么不用python呢?
是技术必须要这个吗?
我也刚刚学shell,但是知道,间隔‘ ’,可以用linux,三神器 ...

远古掘坟。。。
是的是必须要学。。。
感谢分享!

rth 发表于 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

liyuping-fisher 发表于 2023-3-9 10:38:56

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

rth 发表于 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
页: [1]
查看完整版本: 萌新求助!Linux shell 如何在txt文件中查找关键字并计算