1. 准备文件
【awk常用命令】准备文件test.log
,内容如下。三项分别是:日期
,项目
,版本号
'2019年06月05日10:03:13' aaa0e604b6b7fa0a5610c96aee0a8407d9b89b6732a
'2019年06月25日15:14:36' bbbe5fa8f4d2b08867df8cf47e6f8a2bb269043c7cb
'2019年06月28日16:47:27' bbb0727437c9e4d52ce0fcdb5276d6507d1c6ad5d65
'2019年07月16日14:53:51' ccc972b9389fc25e8cef21377967961a43275d8f136
'2019年10月29日11:21:42' aaa4fae5956698f1cc5b223957cf7197b826faa7fef
'2019年10月29日11:33:38' bbb08ba46a814eae69d37b90f2d075eb27ce62bb07f
2. 基本打印
- 打印第一列
$ awk '{print $1}' test.log
- 打印整行
$ awk '{print $0}' test.log
内置参数
NR:行号
NF:总列数
$0:整行
$1-n:代表列序 , $1第一列,$n第n列
- 指定分割符
#
作为分割符$ awk -F '#' '{print $3}' test.log
3. 示例
awk 命令默认是按行扫描的,如果需要扫描的前后执行一些逻辑,可以按照以下的代码结构设置。
awk 'BEGIN {之前的逻辑} {中间的扫描逻辑} END {之后的逻辑}' test.log
- 脚本文件
scriptfile
,执行如下$ awk -f scriptfile test.log
- 去重
$ awk '{ line[$2] = $0 } END { for (key in line) { print line[key] } }' test.log
可以按照时间排序以下,用到
sort
命令, -k1
参数表示按照第一列排序。这里的变量line
类似map
,遍历输出。$ awk '{ line[$2] = $0 } END { for (key in line) { print line[key] } }' test.log | sort -k1
- 逆序输出
$ awk '{ line[NR] = $0 } END { for (i = NR;
i > 0;
--i) print line[i] }' test.log
- 输出分割符
$ awk 'BEGIN {OFS="#"} {print $1,$2,$3}' test.log
打印结果
'2019年06月05日10:03:13'#aaa#0e604b6b7fa0a5610c96aee0a8407d9b89b6732a
'2019年06月25日15:14:36'#bbb#e5fa8f4d2b08867df8cf47e6f8a2bb269043c7cb
'2019年06月28日16:47:27'#bbb#0727437c9e4d52ce0fcdb5276d6507d1c6ad5d65
'2019年07月16日14:53:51'#ccc#972b9389fc25e8cef21377967961a43275d8f136
'2019年10月29日11:21:42'#aaa#4fae5956698f1cc5b223957cf7197b826faa7fef
'2019年10月29日11:33:38'#bbb#08ba46a814eae69d37b90f2d075eb27ce62bb07f