使用 awk 打印第 5 列之后的所有列

使用 awk 打印第 5 列之后的所有列

我正在使用它来过滤日志文件,并尝试将尽可能多的相关细节压缩到控制台上:

 awk -F " " '{$1=$2=$4=$5=$6=$7=""; print $0}'

这是我的原始输入:

149.177.5.87 - [08/Feb/2017:18:14:20 +0000] 18:14:20:408 18:14:20:435 11140 "GET /2/forecast/KBBL/lastSave HTTP/1.1"  200 43 27 27

这是我的 awk 输出:

  [09/Feb/2017:11:27:01     "GET /2/data/load/KBBL/2017-01-25/daily?startDate=2017-01-01&endDate=2019-12-31&firstWeekday=0 HTTP/1.1" ?startDate=2017-01-01&endDate=2019-12-31&firstWeekday=0 401 - 1 1

在这个网页上不是那么明显,但在控制台上很明显,awk 正在添加空格来分隔我已设置的列""

即,在行的开头以及时间戳和信息之间存在较大的间隙。

我可以使用更好的 awk 命令来摆脱它吗?

答案1

在 awk 中也可以做到,但我觉得这样更容易

nifle@xanadu ~/tmp
$ L='149.177.5.87 - [08/Feb/2017:18:14:20 +0000] 18:14:20:408 18:14:20:435 11140 "GET /2/forecast/KBBL/lastSave HTTP/1.1"  200 43 27 27'

nifle@xanadu ~/tmp
$ echo $L |  cut -d ' ' -f 3,8-
[08/Feb/2017:18:14:20 "GET /2/forecast/KBBL/lastSave HTTP/1.1" 200 43 27 27

相关内容