Linux中的groupby和Sum from.txt文件
根据@tripleee的建议,我将针对一个编码问题发布另一个问题,我正试图更具体地说明来源和预期结果 我的源代码Linux中的groupby和Sum from.txt文件,linux,text,group-by,sum,Linux,Text,Group By,Sum,根据@tripleee的建议,我将针对一个编码问题发布另一个问题,我正试图更具体地说明来源和预期结果 我的源代码.txt文件中的行过多,使用AWK,我: 仅提取由特定代码标识的行 解析行的内容,以便仅获取某些值 从子字符串中删除前导零 在这些第一步之后,我保存的输出如下(我可以根据自己的意愿更改列的顺序) 我想要实现的是第二列上的group by,第四列求和,第一列中的每个值都有一行 换句话说,预期产出应为: DEP SUM 01 1646 381 36
.txt
文件中的行过多,使用AWK
,我:
- 仅提取由特定代码标识的行
- 解析行的内容,以便仅获取某些值李>
- 从子字符串中删除前导零
DEP SUM
01
1646 381
3625 125
06
1646 42
3625 22
AF
3547 2
或者通过更好的演示:
DEP | PDV | | SUM
01 | | |
| 1646 | | 381
| 3625 | | 125
06 | | |
| 1646 | | 42
| 3625 | | 22
AF | | |
| 3547 | | 2
到目前为止,我已经尝试过:
awk '{sum[$2]+=$4}
END{for (date in sum) print date, sum[date], freq[date]}' Test_Awk_2.txt
但结果并不是我所期望的:
AF 201506
06 64
您只按一列对总和进行分组,但希望按两列对其进行分组,因此需要将这两列都用作数组中的键 您还打印了一个
freq
数组,但从未分配它。它也不存在于您想要的输出中
awk '{sum[$2" "$1]+=$4}
END{for (date in sum) print date, sum[date]}' Test_Awk_2.txt | sort -n -k1,2
sort
命令将把所有相同的$2
值放在连续的行中。您只需要使用一个数组,它的键是$3”“$1
,值是和。@Barmar这些是我的测试:awk'{arr[$1]+=$4}END{for(arr中的键)printf(“%s\t%s\n”,key,arr[key])“Test_1646.txt\|sort-k2,2
$4
是|
分隔栏。你是说$7
?你只是按PDV
列进行分组,而不是按PDV
和DEP
进行分组。谢谢!我慢慢地到了那里。我错过了2美元到1美元之间的“”号。我在评论中两次提到它。
awk '{sum[$2" "$1]+=$4}
END{for (date in sum) print date, sum[date]}' Test_Awk_2.txt | sort -n -k1,2