Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python bash对一列中的数据进行聚类,并从另一列中提取其值_Python_Bash - Fatal编程技术网

Python bash对一列中的数据进行聚类,并从另一列中提取其值

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

我有一个小问题,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   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
时,它似乎会运行一段时间(因此我杀死了它)。