【发布时间】:2021-03-06 23:11:14
【问题描述】:
我有一个包含数字行的文件。我想打印第一列,以及每行中偶数列的总和。
输入示例:
1 2 3 4 5 6
5 6 5 6 5 6
1 2 1 2 1 2
期望的输出:
1 12
5 18
1 6
这是否可以使用 awk 或任何其他工具来实现?
谢谢!
附:我不想用
awk '{print $1, $2+$4+$6}'
因为我的真实文件有 60 列
【问题讨论】:
我有一个包含数字行的文件。我想打印第一列,以及每行中偶数列的总和。
输入示例:
1 2 3 4 5 6
5 6 5 6 5 6
1 2 1 2 1 2
期望的输出:
1 12
5 18
1 6
这是否可以使用 awk 或任何其他工具来实现?
谢谢!
附:我不想用
awk '{print $1, $2+$4+$6}'
因为我的真实文件有 60 列
【问题讨论】:
使用循环将列号增加 2 并将列添加到总变量中。
awk '{total = 0; for (i = 2; i <= NF; i+=2) total += $(i); print $1, total}' filename
【讨论】:
$ awk '{for(i=4;i<=NF;i+=2) $2+=$i; print $1,$2}' file
更新
对于时序测试,使用了 4 行的 10,000 列数据文件。
$ seq 10000 | paste -s > t && cat t t t t > data
每个测试 3 次,这是两个最差的时间
$ time awk '{for(i=4;i<=NF;i+=2) $2+=$i; print $1,$2}' data > /dev/null
real 0m0.066s
user 0m0.015s
sys 0m0.015s
$ time awk '{s=$2; for(i=4;i<=NF;i+=2) s+=$i; print $1,s}' data > /dev/null
real 0m0.067s
user 0m0.015s
sys 0m0.047s
GNU awk 4.1.4
【讨论】:
awk 版本中没有显示出任何低效率。