显示所有参考特定条件的数字的总和
Display the summation of all numbers reference to specific condition
我的输入如下:
输入:
FILE1 3 5
FILE2 5 9
FILE3 4 6
FILE1 3 5
FILE1 4 6
FILE1 3 5
FILE2 4 6
FILE3 3 5
FILE1 8 3
FILE5 3 5
需要的输出应该如下:
输出:
Name(count) COLUMN1 COLUMN2
FILE1(5) 21 24
FILE2(2) 9 15
FILE3(2) 7 11
FILE5(1) 3 5
输出需要解释:
计算输入中第 1 列中每个名称的每次出现次数,然后使用 (COUNT)
在输出中打印一次该名称
获取每个名称的输入中第 1 列的总和,并在其名称的输出信息中显示总和。
第 3 列和上面的第 2 列一样应该是总和。
更多说明:
输出显示 FILE1,计数为 5,因为 FILE1 在输入中重复了 5 次。
计数为 5 的 FILE1 的值为 21 和 24
21来自input
中任何FILE1第2列的总和
24来自input
中任何FILE1第3列的总和
我用 uniq 和 for/while 尝试了很多排序,但无法获得所需的输出。
- 我不需要使用很多临时文件来获取所需内容,我需要简单的在线命令
使用 awk 只需解析所有行一次:
awk '{col1[]+=; col2[]+=; names[]+=1}
END { for (name in names)
{
printf ("%s(%s) %s %s\n", name, names[name], col1[name], col2[name]);
}
}' inputfile
编辑
解释:
awk 逐行处理输入。从每一行开始,使用名称 </code>。<br>
求和是用 <code>col1
和 col2
完成的。任何新条目都将从 0 开始,因此我可以在当前行中添加值。第一列统计+=1
,其他列相加
我可以添加:
printf ("Processing %s, col1 subtotal=%s, col2 subtotal=%s\n",
, col1[], col2[]);
当您的输入文件出现意外行为时,这会很有帮助。
在 END 块中,我遍历所有存储的名称并使用它们来显示相应的列总计。
我的输入如下:
输入:
FILE1 3 5
FILE2 5 9
FILE3 4 6
FILE1 3 5
FILE1 4 6
FILE1 3 5
FILE2 4 6
FILE3 3 5
FILE1 8 3
FILE5 3 5
需要的输出应该如下:
输出:
Name(count) COLUMN1 COLUMN2
FILE1(5) 21 24
FILE2(2) 9 15
FILE3(2) 7 11
FILE5(1) 3 5
输出需要解释:
计算输入中第 1 列中每个名称的每次出现次数,然后使用 (COUNT)
在输出中打印一次该名称
获取每个名称的输入中第 1 列的总和,并在其名称的输出信息中显示总和。
第 3 列和上面的第 2 列一样应该是总和。
更多说明:
输出显示 FILE1,计数为 5,因为 FILE1 在输入中重复了 5 次。
计数为 5 的 FILE1 的值为 21 和 24
21来自input
中任何FILE1第2列的总和
24来自input
中任何FILE1第3列的总和
我用 uniq 和 for/while 尝试了很多排序,但无法获得所需的输出。
- 我不需要使用很多临时文件来获取所需内容,我需要简单的在线命令
使用 awk 只需解析所有行一次:
awk '{col1[]+=; col2[]+=; names[]+=1}
END { for (name in names)
{
printf ("%s(%s) %s %s\n", name, names[name], col1[name], col2[name]);
}
}' inputfile
编辑
解释:
awk 逐行处理输入。从每一行开始,使用名称 </code>。<br>
求和是用 <code>col1
和 col2
完成的。任何新条目都将从 0 开始,因此我可以在当前行中添加值。第一列统计+=1
,其他列相加
我可以添加:
printf ("Processing %s, col1 subtotal=%s, col2 subtotal=%s\n",
, col1[], col2[]);
当您的输入文件出现意外行为时,这会很有帮助。
在 END 块中,我遍历所有存储的名称并使用它们来显示相应的列总计。