首页 > 解决方案 > 选择第 n 列

问题描述

打印第 n 列并删除一些额外的字符

猫测试.log

12-22-2018-00.log:[1545418720] 服务器警报:irqz1;来自服务器的响应(以毫秒为单位):387

12-22-2018-00.log:[1545118720] PING ALERT: irqz2;服务器自 902 天以来一直在运行

grep -i 'SERVER' test.log |awk '{print $1,$NF}'

12-22-2018-00.log:[1545418720] 387

grep -i 'PING' test.log |awk '{print $1,$NF-1}'

12-22-2018-00.log:[1545118720] 902

我想要的实际结果是:

Server 1545418720 387
Ping   1545118720 902

因此,在服务器警报的情况下,它将选择 unix 时间戳和最后一列,而在 ping 警报的情况下,它将选择 unix 时间戳和右侧第二列。

标签: awksed

解决方案


您能否尝试关注(GNU awk)。

awk -v IGNORECASE=1 '/server alert/{gsub(/.*\[|\]$/,"",$1);print $1,$NF;next} /ping alert/{gsub(/.*\[|\]$/,"",$1);print $1,$(NF-1)}' Input_file

或者

awk 'tolower($0) ~ /server alert/{gsub(/.*\[|\]$/,"",$1);print $1,$NF}' Input_file
AND
awk 'tolower($0) ~ /ping alert/{gsub(/.*\[|\]$/,"",$1);print $1,$(NF-1)}' Input_file

推荐阅读