Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Awk 在linux中如何逐行求和?_Awk - Fatal编程技术网

Awk 在linux中如何逐行求和?

Awk 在linux中如何逐行求和?,awk,Awk,在Linux中如何进行单行求和 我有一个文件: 课程名称:数学 学分:4 12345 1 4 5 1 1 1 1 1 5 10 1 2 2 20 34567 2 3 4 1 10 5 3 2 5 5 10 20 5 课程名称:英语 学分:4 12345 1 4 5 1 1 1 1 1 5 10 1 20 34567 4 1 10 5 3 2 5 5 10 20 5 其产出将是: 课程名称:数学 学分:4 12345 55 34567 75 课程名称:英语 学分:4 12345

在Linux中如何进行单行求和

我有一个文件:

课程名称:数学
学分:4
12345 1 4 5 1 1 1 1 1 5 10 1 2 2 20
34567 2 3 4 1 10 5 3 2 5 5 10 20 5
课程名称:英语
学分:4
12345 1 4 5 1 1 1 1 1 5 10 1 20
34567 4 1 10 5 3 2 5 5 10 20 5
其产出将是:

课程名称:数学
学分:4
12345     55
34567     75
课程名称:英语
学分:4
12345     51
34567     70
我尝试了以下代码:

awk'{for(i=2;iTry:

awk'/^[0-9]/{for(i=2;i仅使用shell

while read line; do
  case $line in   
    Course*|Credit*) echo "$line" ;;
    *) set -- $line
       id=$1
       shift 1
       sum=$(IFS=+; echo "$*" | bc)
       printf "%s\t%d\n" $id $sum
       ;;
  esac
done  < filename
读取行时;执行以下操作
案例$line in
课程*|学分*)呼应“$line”;;
*)设置--$line
id=$1
班次1
总和=$(IFS=+;回声“$*”| bc)
printf“%s\t%d\n”$id$sum
;;
以撒
完成<文件名

这可能也适用于您

sed '/:/{s/.*/echo "&"/;b};s/ /+/2g;s/\(\S*\) \(.*\)/echo "\1\t\$((\2))"/' file | sh

你和我想的是同一个班吗?@Shawn谢谢,修正了。千万不要盲目复制问题中给出的代码!
sed '/:/{s/.*/echo "&"/;b};s/ /+/2g;s/\(\S*\) \(.*\)/echo "\1\t\$((\2))"/' file | sh