首页 > 解决方案 > AWK 命令从提供的模式打印如下模式

问题描述

我有一个模式如下:

Unix文件中的模式: {1.11.111.111 - 2017-10-06T00:00:00+00:00 111111 1 302 "GET /abcd/z1/bcdfgggg?values" uri="/abcd/v2/nano" 111 111 0 "-" "abcd/2.1.0 (Linux; U; Android 8.1.0; Redmi Note 6 Pro MIUI/V10.2.2.0.bcdwvc)" "1111:1111:111:1111:11:d11e:c11c:111a" cu=0.011 nano=0.011 var="-12345" "1111:1111:111:1111:11:d11e:c11c:111a, 11.111.111.111"}

我正在尝试打印以下结果,但结果未按预期打印。

代码: Cat test.txt | awk -F'"' '{ print $1,$9}' |awk -F' ' '{ print $3,$6,$24}'

实际结果2017-10-06T00:00:00+00:00 302

预期结果2017-10-06T00:00:00+00:00 302 cu=0.011

标签: linuxbashunixawk

解决方案


使用 GNU sed 和具有三个反向引用的正则表达式:

sed -r 's/.* ([0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9:+]{14}) [0-9]+ [0-9]+ ([0-9]{3}) .*(cu=[0-9.]+).*/\1 \2 \3/' file

输出:

2017-10-06T00:00:00+00:00 302 立方=0.011

请参阅:堆栈溢出正则表达式常见问题解答


推荐阅读