匹配多个搜索后进行AWK打印

时间:2018-08-14 07:38:28

标签: shell awk

我有如下日志,需要使用新格式进行解析:

2018-08-14 12:07:06,410 - MAILER - INFO - Email sent! - (TEMPORARY PASSWORD: cristronaldode ) to ['cristronaldode@eeee.com'] - Message ID: 01010165369da693-216f985f-e1b0-4dc2-bcea-8a2cd275a506-000000 Result: {'MessageId': '01010165369da693-216f985f-e1b0-4dc2-bcea-8a2cd275a506-000000', 'ResponseMetadata': {'HTTPHeaders': {'content-length': '338', 'date': 'Tue, 14 Aug 2018 04:07:05 GMT', 'x-amzn-requestid': '81bbc0c4-9f77-11e8-81fe-8502a68e3b7d', 'content-type': 'text/xml'}, 'RetryAttempts': 0, 'RequestId': '81bbc0c4-9f77-11e8-81fe-8502a68e3b7d', 'HTTPStatusCode': 200}}

输出:

2018-08-14 12:07:06,410|TEMPORARY PASSWORD: cristronaldode|cristronaldode@eeee.com|'HTTPStatusCode': 200|

我正在尝试使用awk和match函数,但不知道如何在1行中使用多重匹配。谢谢

更新:我正在使用此命令来解析字段,但是由于我要按空格分隔字段,因此需要更正所有行中的字段。所以我想要其他解决方案。

awk -F ' ' '{print $1,$2"|"$11,$12,$13,$14,$15,$16,$17,$18,$19"|"$21"|"$48,$49}' | sed -e 's/[()]//g' | sed -e 's/[][]//g'| sed -e 's/}//g'

1 个答案:

答案 0 :(得分:0)

awk的字段分隔符可以是正则表达式。

awk -F '[][)(}{ ]*' '{print $1,$2}' file

我们现在在所有括号(例如字符)上定界,并将这些字符的多次出现记为一个。

您可以弄清楚现在必须使用哪些字段。