Unix 是否可以使用awk在输入文件中插入新列?
我的输入文件如下 文件名:marksheetUnix 是否可以使用awk在输入文件中插入新列?,unix,awk,Unix,Awk,我的输入文件如下 文件名:marksheet 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 现在我要执行总计和百
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
所以现在我想在文件marksheet中添加上面的列(输出)。所以,如果可能的话,那么如何使用awk执行命令。Begin语句就是定义文件的头。您已经计算了总和和平均数。打印的
$0
表示整行,然后是总计
,然后是每
变量,其中包含总和和平均值的值OFS
这里使用tab键使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
由于我从未使用过
-I
开关和就地编辑(根据第4.1.0版(gawk-v
)以来的Gnu awk),我决定尝试一下。我以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
间距差异来自于输出中的实际制表符与剪切粘贴问题以供输入。Sir实际上,我想在文件“marksheet”中插入总计和百分比列,而不仅仅是在输出中。这是一个很好的尝试,但awk中的printf会简化它!我引用:在最新的GNU Awk(自4.1.0发布以来)中,它有“就地”文件编辑选项--