Bash 从一行中获取一个特定的数字并附加它

Bash 从一行中获取一个特定的数字并附加它,bash,shell,scripting,Bash,Shell,Scripting,我正在尝试筛选文件的特定行,以仅从中获取编号 我的文件位于/home/evaluation/studentName,其中包含以下内容: 英语18 历史18 数学18 总数:90/100 但也可能包含以下内容: 英语14 历史14 总数:70/100 所以每个学生都有自己的分数 我只想过滤总数。 因此它将显示:90或70 然后简单地将该数字附加到学生文件中 到目前为止,我看到了这个: for file in /home/evaluation/* ; do awk -v tot=

我正在尝试筛选文件的特定行,以仅从中获取编号

我的文件位于/home/evaluation/studentName,其中包含以下内容:

  • 英语18
  • 历史18
  • 数学18
  • 总数:90/100
但也可能包含以下内容:

  • 英语14
  • 历史14
  • 总数:70/100
所以每个学生都有自己的分数


我只想过滤总数。 因此它将显示:9070

然后简单地将该数字附加到学生文件中


到目前为止,我看到了这个

for file in /home/evaluation/* ; do
    awk -v tot="$tot" '{sum+=$2} END {print "Total", (sum/(tot*20))*100"/100"}' "$file" >> "$file"
result=$(grep "Total" "$file" | cut d' ' -f2)
echo "$result" >> $file
done

但不幸的是,它不起作用。

下面这样的东西怎么样

for file in /home/evaluation/*  
 do 
  result=$(cat $file | grep Total | cut -d':' -f2 | cut -d'/' -f1) 
  echo "$result" >> $file
 done
单行
sed
解决方案: 所有作业都有一个简单的命令

假定
Total
已经是最后一行:

sed 's/Total \([0-9]\+\)\/[0-9]\+ *$/&\n\1/' -i /home/evaluation/*
如果总数不是最后一行,事情就变得更复杂了:

sed '/Total/{ h; s/Total \+\([0-9]\+\)\/.*$/\1/; x; };$G' -i /home/evaluation/*

关心
-i
标志!您可以使用
-i.bak
创建备份文件…避免无用的
cat
result=$(grep Total