我的输入文件如下
文件名:标记表
No Name Sub1 Sub2 Sub3
1 Atul 89 56 78
2 Jay 56 88 75
3 Mariya 85 75 56
4 Nita 90 88 95
现在我要执行总数和百分比。 所以我在命令下执行
awk 'total=$3+$4+$5, per=total/3 {print total "\t" per}' marksheet
它给出了total和column的输出。如
223 74.3333
219 73
216 72
273 91
所以现在我想在文件标记表中添加上面的列(输出)。因此,如果可以,那么如何使用awk执行命令。
答案 0 :(得分:2)
Begin语句是定义文件的标题。你已经计算了总和和平均值。打印$0
表示整行,然后是total
,然后是per
变量,其中包含总和和平均值的值。 OFS
这里让awk
知道要使用制表符分隔的输出字段。
awk -v OFS="\t" 'BEGIN{print "No Name Sub1 Sub2 Sub3 total percent"} NR>1{total=$3+$4+$5; per=total/3 ;print $0 ,total,per }' marksheet
No Name Sub1 Sub2 Sub3 total percent
1 Atul 89 56 78 223 74.3333
2 Jay 56 88 75 219 73
3 Mariya 85 75 56 216 72
4 Nita 90 88 95 273 91
要实际修改基本文件:
awk -v OFS="\t" 'BEGIN{print "No Name Sub1 Sub2 Sub3 total percent"} NR>1{total=$3+$4+$5; per=total/3 ;print $0 ,total,per }' marksheet >marksheet.tmp && mv marksheet.tmp marksheet
答案 1 :(得分:0)
因为我从未使用过-i
开关和就地编辑(在自4.1.4版(gawk -V
)后的Gnu awk中,根据awk save modifications in place)我决定接受它旋转。我拿了OP的示例数据和代码并继续使用它:
$ awk -i inplace -v INPLACE_SUFFIX=.bak 'NR==1 && $6="total", $7="per"; NR>1 && $6=$3+$4+$5, $7=$6/3' OFS='\t' file
$ cat file
No Name Sub1 Sub2 Sub3 total per
1 Atul 89 56 78 223 74.3333
2 Jay 56 88 75 219 73
3 Mariya 85 75 56 216 72
4 Nita 90 88 95 273 91
备份:
$ cat file.bak
No Name Sub1 Sub2 Sub3
1 Atul 89 56 78
2 Jay 56 88 75
3 Mariya 85 75 56
4 Nita 90 88 95
间距差异来自于输出中的实际标签与切换输入的问题。