我正在尝试编写一个脚本来汇总所有数字(第2列)以相同的前两位数字(第1列)开头,然后用相同的前两位数字保存它们然后为零(即1001将为1000,96542将是96000)。例如;
ele table 5
1001.03c 1
1002.03c 2
1003.03c 1
2003.03c 3
2004.03c 1
3006.03c 0
3007.03c 5
44009.03c 1
ele table 22
1001.03c 1
1002.03c 0
1003.03c 0.2
2003.03c 1
2004.03c 2
3006.03c 2.2
3007.03c 3
44009.03c 0
55010.03c 2
因此,我们的想法是获取具有以下输出的输出文件:
ele table 5
1000.03c 4
2000.03c 4
3000.03c 5
44000.03c 1
ele table 22
1000.03c 1.2
2000.03c 3
3000.03c 5.2
4000.03c 0
55000.03c 2
该列表适用于长文件。我会感激任何帮助。
答案 0 :(得分:0)
Awk
解决方案:
awk 'function pr(){
printf "\t%d%0*d%s %s\n", k, len-6, "", fr, sum; sum = 0;
}
/^ele +table/{
if (k) pr();
print; next
}
k && substr($1, 1, 2) != k{ pr() }
{
k = substr($1, 1, 2);
len = length($1);
fr = substr($1, index($1, "."));
sum += $2
}
END{ pr() }' file
输出:
ele table 5
1000.03c 4
2000.03c 4
3000.03c 5
44000.03c 1
ele table 22
44000.03c 0
1000.03c 1.2
2000.03c 3
3000.03c 5.2
44000.03c 0
55000.03c 2