Python bash对一列中的数据进行聚类,并从另一列中提取其值
我有一个小问题,apache日志中有四列,如下所示:Python bash对一列中的数据进行聚类,并从另一列中提取其值,python,bash,Python,Bash,我有一个小问题,apache日志中有四列,如下所示: 1 45 2525 2001-01-09 03:51:09 2 25 4000 2001-01-09 05:54:20 3 87 5500 2001-01-09 05:04:09 4 76 4000 2001-01-09 05:08:43 5 345 2525 2001-01-09 05:11:33 6
1 45 2525 2001-01-09 03:51:09
2 25 4000 2001-01-09 05:54:20
3 87 5500 2001-01-09 05:04:09
4 76 4000 2001-01-09 05:08:43
5 345 2525 2001-01-09 05:11:33
6 875 5500 2001-01-09 05:28:23
7 2345 2525 2001-01-09 05:32:13
8 1445 4000 2001-01-09 05:40:55
9 69 2525 2001-01-09 05:41:33
我想做的是将第2列考虑在内,对第3列中的项目进行集群。因此,我希望最终结果如下所示:
45,345,2345,69 2525
25,1445 4000
87,875 5500
我如何在bash中进行此操作?或任何其他命令行工具?您可以尝试使用awk:
使用Aarons comment中的三元运算符来去掉前导逗号:
awk '{cluster[$3] = cluster[$3] ? cluster[$3]","$2 : $2} END {for(x in cluster){print cluster[x]"\t"x}}'
您可以尝试使用awk:
使用Aarons comment中的三元运算符来去掉前导逗号:
awk '{cluster[$3] = cluster[$3] ? cluster[$3]","$2 : $2} END {for(x in cluster){print cluster[x]"\t"x}}'
这似乎很有魅力。。出于某种原因,它每行都以一个
,
开头-你知道为什么吗?抱歉,我不是awk
专家。您可以使用三元组来避免前面的逗号:awk'{cluster[$3]=cluster[$3]?cluster[$3],“$2:$2}END{for(x in cluster){print cluster[x]'\t“x}}'
。此外,您还可以在其后面添加| column-t
,以获得一个正确的表格,如示例输出中所示,使用三元似乎避免了逗号-谢谢。但是,当我尝试列-t
时,它似乎挂起了?所以,我确实cat mytext.csv | | column-t>out.txt
我不得不杀死它。。有什么想法吗?那你怎么确定它的悬挂?你的日志文件有多大?根据大小,可能需要几分钟来处理。你也可以跳过cat…
,只需执行awk'…'mytext.csv
@voiDnyx我的意思是没有列-t
,它在几秒钟内处理(结果是spoton),而当我使用列-t
时,它似乎会运行一段时间(所以我杀死了它)。这看起来像是一种魅力。。出于某种原因,它每行都以一个,
开头-你知道为什么吗?抱歉,我不是awk
专家。您可以使用三元组来避免前面的逗号:awk'{cluster[$3]=cluster[$3]?cluster[$3],“$2:$2}END{for(x in cluster){print cluster[x]'\t“x}}'
。此外,您还可以在其后面添加| column-t
,以获得一个正确的表格,如示例输出中所示,使用三元似乎避免了逗号-谢谢。但是,当我尝试列-t
时,它似乎挂起了?所以,我确实cat mytext.csv | | column-t>out.txt
我不得不杀死它。。有什么想法吗?那你怎么确定它的悬挂?你的日志文件有多大?根据大小,可能需要几分钟来处理。您也可以跳过cat…
,只需执行awk'…'mytext.csv
@voiDnyx我的意思是没有列-t
,它会在几秒钟内处理(结果是spoton),而当我使用column-t
时,它似乎会运行一段时间(因此我杀死了它)。