Linux中的groupby和Sum from.txt文件

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

根据@tripleee的建议,我将针对一个编码问题发布另一个问题,我正试图更具体地说明来源和预期结果

我的源代码
.txt
文件中的行过多,使用
AWK
,我:

  • 仅提取由特定代码标识的行
  • 解析行的内容,以便仅获取某些值
  • 从子字符串中删除前导零
在这些第一步之后,我保存的输出如下(我可以根据自己的意愿更改列的顺序)

我想要实现的是第二列上的group by,第四列求和,第一列中的每个值都有一行

换句话说,预期产出应为:

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 2
01506
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