Awk 在linux中如何逐行求和?
在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
课程名称:数学
学分: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