【问题标题】:Is it possible to insert new column in input file using awk?是否可以使用 awk 在输入文件中插入新列?
【发布时间】:2016-09-28 22:35:30
【问题描述】:

我的输入文件如下

文件名:标记表

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

它给出总计和列的输出。作为

223       74.3333
219       73
216       72
273       91

所以现在我想在文件标记表中添加上面的列(输出)。因此,如果可能的话,那么如何使用 awk 执行命令。

【问题讨论】:

标签: unix awk


【解决方案1】:

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

【讨论】:

  • 先生,实际上我想在“marksheet”文件中插入总计和百分比列,而不是仅在输出中。
  • 不错的尝试,但 awk 中的 printf 会简化它!
【解决方案2】:

由于我从未使用过-i 开关和就地编辑(在 Gnu awk 中,自 v. 4.1.0 (gawk -V),根据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

间距差异来自输出中的真实选项卡与剪切粘贴问题以供输入。

【讨论】:

    猜你喜欢
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-14
    • 2014-03-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    相关资源
    最近更新 更多