【发布时间】:2020-06-17 07:18:11
【问题描述】:
我最近在做日志分析时遇到了一个棘手的情况,我不是 REGEX 方面的专家,所以只想在这里发帖,看看我是否有什么好的解决方案
问题: 下面我粘贴了通过对 unix 日志文件执行 awk 和 grep 命令获得的结果。使用 awk |sort |uniq -c
`2851 ABC=10087 ACG=123 RMC=17`
`2851 ABC=10087 ACG=123 RMC=17`
`1323 ABC=10087 ACG=123 RMC=10`
`1323 ABC=10087 ACG=123 RMC=20`
`1323 ABC=10087 ACG=123 RMC=20`
`248 ABC=10087 ACG=123 RMC=8`
`248 ABC=10087 ACG=123 RMC=8`
`236 ABC=10087 ACG=123 RMC=7`
`127 ABC=10087 ACG=123 RMC=16`
`127 ABC=10087 ACG=123 RMC=16`
`67 ABC=10087 ACG=123 RMC=1`
我将上面的输出(“|”)通过管道传递给它,并对其应用 sed 命令以对第 7 个字段(即 RMC 值按降序排列)进行排序,所以我使用了这个
sed's/=/ / g' |sort -rnk 7,7 .
在对值进行排序后,我再次将输出更改为以前的样子,所以我重新应用了我使用的 sed,
sed 's/=/ / g' |sort -rnk 7,7 |sed 's/ /=/g'
这是我所期待的
`1323 ABC=10087 ACG=123 RMC=20`
`1323 ABC=10087 ACG=123 RMC=20`
`2851 ABC=10087 ACG=123 RMC=17`
`2851 ABC=10087 ACG=123 RMC=17`
`127 ABC=10087 ACG=123 RMC=16`
`127 ABC=10087 ACG=123 RMC=16`
`1323 ABC=10087 ACG=123 RMC=10`
`248 ABC=10087 ACG=123 RMC=8`
`248 ABC=10087 ACG=123 RMC=8`
`236 ABC=10087 ACG=123 RMC=7`
`67 ABC=10087 ACG=123 RMC=1`
但我的输出看起来像这样
`===1323=ABC=10087=ACG=123=RMC=20`
`===1323=ABC=10087=ACG=123=RMC=20`
`===2851=ABC=10087=ACG=123=RMC=17`
`===2851=ABC=10087=ACG=123=RMC=17`
`====127=ABC=10087=ACG=123=RMC=16`
`====127=ABC=10087=ACG=123=RMC=16`
`===1323=ABC=10087=ACG=123=RMC=10`
`====248=ABC=10087=ACG=123=RMC=8`
`====248=ABC=10087=ACG=123=RMC=8`
`====236=ABC=10087=ACG=123=RMC=7`
`=====67=ABC=10087=ACG=123=RMC=1`
我怎样才能达到我想要的输出?
【问题讨论】:
-
看起来您可以在输入时使用
... | sort -rnk4.6。
标签: regex linux bash sorting sed