awk工具(三剑客)

简介:

1、awk介绍

awk:(三剑客之一)

awk:是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk则更支持分段,默认会以空格为分隔符将每行分段,对分段分析处理(匹配 查找 )

awk的版本:

awk:主要有三个版本:awk(GPL版本)  nawk(new 增强版)   gawk(GUN版本)

2、awk的基本用法:

2.1:打印指定内容(指定段):

1
2
3
4
5
[root@localhost  awk ] # awk -F ':' '{print $1}' test.txt      # -F参数用来指定文件分隔符,默认是以空格为分隔符:
root
bin
daemon
adm

注意:默认以文件内容里空格为分隔符打印:

打印整个文本文档:使用 "$0"  则打印整个文本:

1
2
3
4
[root@localhost  awk ] # awk '{print $0}' test.txt
root:x:0:0:root: /root : /bin/bash
bin:x:1:1:bin: /bin : /sbin/nologin
daemon:x:2:2:daemon: /sbin : /sbin/nologin

也支持同时打印多个段落,支持手动指定分隔符:打印后的内容默认空格为分隔符显示

1
2
3
4
[root@localhost  awk ] # awk  -F ':' '{print $1,$2,$3}' test.txt     #默认则以空格为分隔符:    
root x 0
bin x 1
daemon x 2

也支持对打印后的文件手动指定分隔符:如下:对打印后的内容手动指定分隔符“#”并显示:

1
2
3
4
5
[root@localhost  awk ] # awk  -F ':' '{print $1"#"$2"#"$3}'   test.txt         #手动对打印后的内容分隔符以"#"为分隔符显示:
root #x#0
bin #x#1
daemon #x#2
adm #x#3

注意:指定分隔符后该命令只识别指定的分隔符,如果莫行无指定分隔符,则会打印整行:

2.2:awk的匹配功能(用 "~" 来表示匹配)

针对数学表达式的用法

  • 数值比较

当'$3>=1000 {print $1}'时:
[root@adai003 awk]# awk -F ':' '$3>=1000 {print $1}' test.txtuser001

当'$3>="1000" {print $1}'时:
[root@adai003 awk]# awk -F ':' '$3>="1000" {print $1}' test.txt |head -3daemon
adm
lp

匹配字符串:
[root@adai003 awk]# awk -F ':' '$7!="/sbin/nologin" ' test.txt root:x:0:0:root:/root:/bin/bashsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltuser001:x:1000:1000::/home/user001:/bin/bash“!=”表示不等于

说明: 当“1000”加引号时会被当做是字符串,以ASC码(二进制)的方式进行计算处理,不加引号的时候会被当做是数值处理。

[root@adai003 awk]# head -n3 test.txt |awk -F ':' '{OFS=":"} $1="root"'root:x:0:0:root:/root:/bin/bashroot:x:1:1:bin:/bin:/sbin/nologinroot:x:2:2:daemon:/sbin:/sbin/nologin[root@adai003 awk]# awk -F ':' '$3=="0" {print $1}' test.txtroot

说明: 当使用一个“=”等号时表示为等号前面字符赋值,使用两个“==”表示逻辑关系(进行判断)。

9.7 awk 命令(下)

  • 字符比较大小

[root@adai003 awk]# awk -F ':' '$3<$4' test.txtadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinmail:x:8:12:mail:/var/spool/mail:/sbin/nologingames:x:12:100:games:/usr/games:/sbin/nologinftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

[root@adai003 awk]# awk -F ':' '$3==$4' test.txt |head -3root:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologin[root@adai003 awk]# awk -F ':' '$3>"5" && $3<"7"' test.txt shutdown:x:6:0:shutdown:/sbin:/sbin/shutdowntss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin

说明: “&&”表示并且。

[root@adai003 awk]# awk -F ':' '$3>1000 || $7!="/sbin/nologin"' test.txt root:x:0:0:root:/root:/bin/bashsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltuser001:x:1000:1000::/home/user001:/bin/bash[root@adai003 awk]# awk -F ':' '$3>1000 || $7~/bash/' test.txt root:x:0:0:root:/root:/bin/bashuser001:x:1000:1000::/home/user001:/bin/bash

说明: “||”表示或者。

OFS指定打印时的分隔符

语法1:
[root@adai003 awk]# awk -F ':' '{OFS="#"} $3>1000 || $7~/bash/ {print $1,$3,$7}' test.txt root#0#/bin/bashuser001#1000#/bin/bash语法2:
[root@adai003 awk]# awk -F ':' '{OFS="#"} {if ($3>1000 || $7~/bash/) {print $1,$3,$7}}' test.txt root#0#/bin/bashuser001#1000#/bin/bash
  • NR (=number row)表示行号

[root@adai003 awk]# awk -F ':' '$3<5 && $7!="/sbin/nologin" {print NR":"$1}' test.txt1:root[root@adai003 awk]# awk -F ':' '$3<5 && $3>2 && $7=="/sbin/nologin" {print NR":"$1}' test.txt4:adm5:lp打印前三行:
[root@adai003 awk]# awk -F ':' 'NR<=3' test.txtroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologin[root@adai003 awk]# awk -F ':' 'NR<=3 && $1~/root/' test.txtroot:x:0:0:root:/root:/bin/bash

注: 类似于grep -n。

  • NF (=number fragment)表示段数(列)

[root@adai003 awk]# awk -F ':' '$3<5 && $3>2 && $7=="/sbin/nologin" {print NF":"$1}' test.txt7:adm7:lp
  • 求和

[root@adai003 awk]#  awk -F ':' '{(tot=tot+$3)}; END {print tot}' test.txt5657









本文转自 芬野 51CTO博客,原文链接:http://blog.51cto.com/yuanhaohao/2062316,如需转载请自行联系原作者
目录
相关文章
|
16天前
|
运维 监控 数据处理
常用的运维工具:基本的命令行工具详解(grep, awk, sed)
常用的运维工具:基本的命令行工具详解(grep, awk, sed)
34 14
常用的运维工具:基本的命令行工具详解(grep, awk, sed)
|
5月前
|
数据处理 Perl
AWK 命令20条
AWK 命令示例:显示文件内容、按列打印、计数、使用分隔符、模式匹配、条件语句、数学计算、数组操作、字符串处理、循环、输出格式控制、删除重复行、统计行词字符、分组统计、格式化输出、字段联合、自定义分隔符、字符串截取和调用外部命令。AWK 是强大的文本分析工具,适用于各种数据处理任务。
106 1
|
运维 Shell Linux
linux文本处理工具——grep、sed、awk用法
linux文本处理工具——grep、sed、awk用法
141 1
|
存储 机器学习/深度学习 Unix
sed 和 awk 使用方法 | 学习笔记
快速学习 sed 和 awk 使用方法。
156 0
|
Linux Perl
linux高级命令行文本处理cut,sed,awk
cut   sort排序 wc  sed linux sed的详细指令 -i会删除 删除 替换 AWK awk命令详解   ...
1771 0
|
Linux 网络安全 Perl
Linux的文本处理工具浅谈-awk sed grep
Linux的文本处理工具浅谈 awk   老大 【功能说明】 用于文本处理的语言(取行,过滤),支持正则 NR代表行数,$n取某一列,$NF最后一列 NR==20,NR==30 从20行到30行 FS竖着切,列的分隔符 RS横着切,行的分隔符 ...
1424 0