《快学BigData》-Linux awk命令详解(9)

Linux awk命令详解1-1)、基本语法

[root@hadoop1 /]#awk ‘pattern + action’

A)、书写格式

命令行模式

[root@hadoop1 /]#awk -F":" '' /etc/passwd

文本模式

[root@hadoop1 /]#vi testAwk.sh

#!/usr/bin/awk

BEGIN

B)、变量

常用内置变量

$0当前所有的字段

$0 - $n系统的内置变量,当前第n个字段

NF输入来记录的分隔符(默认的是空格)

NR行号

FS : field separator,读取文件本时,所使用字段分隔符

RS : Record separator,输入文本信息所使用的换行符

OFS : Output Filed Separator,文件分隔符

ORS:Output Row Separator,行分隔符

外置变量

awk -v n="test" 'BEGIN'

- v :传参的参数

C)、操作符

关系操作符:< , > , = , == , != , ~ , !~

~ :表示匹配的意思

!~ :表示不匹配的意思

例如:[root@hadoop1 /]# awk -F":" '$7 ~ /^\/bin/' /etc/passwd

[root@hadoop1 /]# awk -F":" '$7!~ /^\/bin/' /etc/passwd

布尔操作符:&& , , !

D)、print与printf的区别

print :直接输出变量值或给定的字符串

Printf:可以实现格式化输出

[root@hadoop1 /]#awk -F":" '' /etc/passwd

1-2)、awk流程控制A)、条件

实例一

[root@hadoop1 /]#awk -F":" '}' /etc/passwdno

pk

No

***********

实例二

[root@hadoop1 /]#awk -F":" '}' /etc/passwd

$NF:是表示最后一个单词的记录

B)、while语句

实例一

[root@hadoop1 /]#awk -F":" '}' /etc/passwd

实例二

[root@hadoop1 /]#awk -F":" '}' /etc/passwd

C)、数组

[root@hadoop1 /]#awk -F":" 'END}' /etc/passwd

1-3)、函数A)、算数函数

int(x) :返回X的整数部分的值

sqrt(x) :返回x的平方根

rand() :返回伪随机数r,其中0

srand :建立rand()新的种子数,如果没有制定就用当天的时间

B)、算数函数

sub(),gsub() :替换函数

Index(s,t) :返回子串t在字符串s中的位置,如果没有则返回

length(s) :返回字符串长度,当没有给出s时,返回$0的长度

match(s,a,seq) :使用seq将字符串s分解到数组a中,默认seq伪FS

sub(),gsub() :替换函数

Index(s,t) :返回子串t在字符串s中的位置,如果没有则返回

length(s) :返回字符串长度,当没有给出s时,返回$0的长度

match(s,a,seq) :使用seq将字符串s分解到数组a中,默认seq伪FS

C)、自定义函数

[root@hadoop1 /]#awk 'function sum(n,m)BEGIN'

13

1-4)、awk实战A)、获取IP地址

[root@hadoop1 /]#ifconfig wlp3s0 grep -w "inet" awk ''

192.168.199.137

B)、查找制定字段的运行时间

[root@hadoop1 /]#ps -efgrep java awk ''

00:00:00

C)、对每一个分隔符添加相对应的字符

[root@hadoop1 /]#nl passwd awk -F":" '' head -n 5

1root*****/bin/bash

2daemon*****/usr/sbin/nologin

3bin*****/usr/sbin/nologin

4sys*****/usr/sbin/nologin

5sync*****/bin/sync

[root@hadoop1 /]#$ nl passwd awk 'BEGIN' head -n 5

1root****/bin/bash

2daemon****/usr/sbin/nologin

3bin****/usr/sbin/nologin

4sys****/usr/sbin/nologin

5sync****/bin/sync

记录当前的field个数

$ nl passwd awk 'BEGIN' head -n 5

1root****/bin/bash****7

2daemon****/usr/sbin/nologin****7

3bin****/usr/sbin/nologin****7

4sys****/usr/sbin/nologin****7

5sync****/bin/sync****7

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180125G0R1P900?refer=cp_1026

相关快讯

扫码关注云+社区