awk工具

作者: hch004 | 来源:发表于2018-01-18 08:28 被阅读0次

9.6 awk命令(上)

awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk有很多内建的功能,比如数组、函数等,这是它和C语言的相同之处,灵活性是awk最大的优势。

awk应用

awk打印指定内容

awk ‘{print $n}’ [filename] 在此n代表数字(当n=0时$0代表文件所有内容,当n=1,2,3...时$1,2,3...代表相应列)

awk -F 指定分隔符(默认以空格为分隔符)

[root@hch awk]# awk -F ':' '{print $1}' test.txt

root

bin

daemon

daemon

Ctrl-Alt-Deoooleoooote ios handled by /usr/lib/systemd/system/c

……

可以一次打印多列:

[root@hch awk]# awk -F ':' '{print $1,$2,$3}' test.txt |head -3

root x 0

bin x 1

daemon x 2

可以指定打印各列内容时的分隔符号:

[root@hch awk]#awk -F ':' '{print $1"#"$2"#"$3}' test.txt |head -3

root#x#0

bin#x#1

daemon#x#2

说明: 指定分隔符后该命令只识别指定的分隔符,如果某行无指定的分隔符则会打印其整行!

awk的匹配功能(匹配用“~”)

打印含有“oo”的所有行:

[root@adai003 awk]# awk '/oo/' test.txt

root:x:0:0:roprot:/root:/bin/bash

Ctrl-Alt-Deoooleoooote ios handled by /usr/lib/systemd/system/c

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

打印第一段含有“oo”的行:

[root@adai003 awk]# awk -F ':' '$1 ~ /oo/' test.txt

root:x:0:0:root:/root:/bin/bash

注:‘~’表示匹配!

支持正则表达式:

[root@hch awk]# awk -F ':' '$1 ~ /o+/' test.txt

root:x:0:0:root:/root:/bin/bash

daemon:x:2:2:daemon:/sbin:/sbin/nologin

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

operator:x:11:0:operator:/root:/sbin/nologin

[root@hch awk]# awk -F ':' '$1 ~ /oo+/' test.txt

root:x:0:0:root:/root:/bin/bash

支持多个表达式同时执行:

[root@hch awk]# awk -F ':' '/root/ {print $1,$3} /user/ {print $1,$3,$4}' test.txt

root 0

operator 11

tss 59 59

针对数学表达式的用法

数值比较

当'$3>=1000 {print $1}'时:

[root@hch awk]# awk -F ':' '$3>=1000 {print $1}' test.txt

mysql

[root@hch awk]# awk -F ':' '$3==0 {print $1}' test.txt

root

[root@hch awk]# awk -F ':' '$3==0 {print $0}' test.txt

root:x:0:0:root:/root:/bin/bash

[root@hch awk]# awk -F ':' '$3>=1000 {print $0}' test.txt

mysql:x:1000:1000::/home/mysql:/bin/bash

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

[root@hch awk]# head -n3 test.txt |awk -F ':' '{OFS=":"} $1="root"'

root:x:0:0:root:/root:/bin/bash

root:x:1:1:bin:/bin:/sbin/nologin

root:x:2:2:daemon:/sbin:/sbin/nologin

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

9.7 awk 命令(下)

字符比较大小

[root@hch awk]# awk -F ':' '$3<$4' test.txt

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

games:x:12:100:games:/usr/games:/sbin/nologin

[root@hch awk]# awk -F ':' '$3==$4' test.txt |head -3

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

[root@hch awk]# awk -F ':' '$3>"5" && $3<"7"' test.txt

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin

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

[root@hch awk]# awk -F ':' '$3>1000 || $7!="/sbin/nologin"' test.txt

root:x:0:0:root:/root:/bin/bash

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

mysql:x:1000:1000::/home/mysql:/bin/bash

[root@hch awk]# awk -F ':' '$3>1000 || $7~/bash/' test.txt

root:x:0:0:root:/root:/bin/bash

mysql:x:1000:1000::/home/mysql:/bin/bash

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

OFS指定打印时的分隔符

[root@hch awk]# awk -F ':' '{OFS="#"} $3>1000 || $7~/bash/ {print $1,$3,$7}' test.txt

root#0#/bin/bash

mysql#1000#/bin/bash

[root@hch awk]# awk -F ':' '{OFS="#"} {if ($3>1000 || $7~/bash/) {print $1,$3,$7}}' test.txt

root#0#/bin/bash

mysql#1000#/bin/bash

NR (=number row)表示行号

[root@hch awk]# awk -F ':' '{OFS="#"} $3>1000 || $7~/bash/ {print $1,$3,$7}' test.txt

root#0#/bin/bash

mysql#1000#/bin/bash

[root@hch awk]# awk -F ':' '{OFS="#"} {if ($3>1000 || $7~/bash/) {print $1,$3,$7}}' test.txt

root#0#/bin/bash

mysql#1000#/bin/bash

[root@hch awk]# awk -F ':' '$3<5 && $7!="/sbin/nologin" {print NR":"$1}' test.txt

1:root

[root@hch awk]# awk -F ':' '$3<5 && $3>2 && $7=="/sbin/nologin" {print NR":"$1}' test.txt

4:adm

5:lp

[root@hch awk]# awk -F ':' 'NR<=3' 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

[root@hch awk]# awk -F ':' 'NR<=3 && $1~/root/' test.txt

root:x:0:0:root:/root:/bin/bash

注: 类似于grep -n。

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

相关文章

  • awk

    1- awk是什么 awk是linux环境下的一个命令行工具,但是由于awk强大的能力,我们可以为awk工具传递一...

  • note_17.3_awk

    GNU awk: 文本处理三工具:grep, sed, awk grep, egrep, fgrep:文本过滤工具...

  • awk工具

    9.6 awk命令(上) awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准...

  • AWK精华

    awk: grep,sed,awk grep:文本过滤 sed:文本编辑 awk:文本格式化工具; 1 什么是aw...

  • linux中的awk命令详解

    1、AWK简介 AWK是一种处理文本文件的语言,是一个强大的文本分析工具。 2、AWK语法 awk [选项参数] ...

  • Linux命令

    AWK - 行文本处理工具 原理: 逐行处理文本数据语法: awk 'pattern + {action}'...

  • Nginx访问量统计

    1、awk是什么?及awk基本用法。 awk 是一种处理文本文件的语言,是一个强大的文本分析工具。 awk 其实不...

  • 预习笔记day14(awk的语法参数以及简单应用)

    1. awk是linux运维工作中最重要、最强大的工具之一。 2.awk命令语法及参数: awk option ...

  • shell -- AWK&文本处理 浅析

    markdown 编辑,来写awk真是麻烦awk 入门:awk 是格式化文本处理最常用的工具,日常捞数据、切数据最...

  • 从零开始学习Linux(四十三):Shell编程之awk命令

    1、awk命令简介 awk命令是一种处理文本文件的语言,是一个强大的文本分析工具。awk命令也可以叫awk编程,能...

网友评论

      本文标题:awk工具

      本文链接:https://www.haomeiwen.com/subject/mgovoxtx.html