萌新求助!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
<>
感谢回答! {:10_266:}沉了……{:10_266:} 为什么不用python呢?
是技术必须要这个吗?
我也刚刚学shell,但是知道,间隔‘ ’,可以用linux,三神器,awk截取字符,if [] test进行判断
for line in `cat a.txt`
do
echo $line
sleep 1
done
进行行遍历 immotral 发表于 2021-1-23 09:41
为什么不用python呢?
是技术必须要这个吗?
我也刚刚学shell,但是知道,间隔‘ ’,可以用linux,三神器 ...
远古掘坟。。。
是的是必须要学。。。
感谢分享! #!/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
引用楼上的代码稍微修改了下,请楼主参考#!/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
~
#!/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]