文本三剑客之awk

1、基本语法

Awk –Fs ‘/pattern/ {action}’ input-file (或者) Awk –Fs ‘{action}’ input-file

-Fs  是分隔符,默认是空格。

-F :  和-F  ':' 都是对的

/pattern/指定的模式,可不选,不选则表示awk处理文件的所有内容。

{action}可以是单个命令也可以是多个命令。

input-file是要处理的文件。

/pattern/ {action}  需要用单引号引起来。

例如

awk    -F  :  '/root/{print $1}'  /etc/passwd

以冒号为分隔符,打印 /etc/passwd中匹配到的第一个字段。

2、awk命令脚本文件

-f  参数调用这个脚本文件。

awk  -Fs   -f   script.awk   /etc/passwd

3、awk程序结构区域{BEGIN,BODY,END}

BEGIN区域的基本用法:

BEGIN{awk-commands}

BEGIN必须大写,并且在执行body区域之前执行一次,也可以用来初始化变量。

body区域的用法

/pattern/{action}

body部分只有正则模式和对应的命令,每读取一行,执行一次命令。

end区域

语法:

END { awk-commands }

在整个命令结束后执行一次。AND关键字必须大写。

4、打印命令print

awk  '{print}' test.txt 

等同于cat   test.txt

5、-F的作用

指定分隔符

搭配$使用,指定以指定分隔符的第几个字段的内容,一般print出来。

6、awk的内置变量

(1)FS  指定输入字段分隔符,在BEGIN区域使用

例如

awk  -F ', '  '{print $1 $2}'  /etc/passwd

等同于

awk   'BEGIN{FS=","} {print $1,$2}' /etc/passwd

如何指定多个输入字段分隔符?

FS依然可以解决,例如:

awk   'BEGIN{FS="[,?%:]"} {print $1,$2}'  /etc/passwd

(2)输出字段分隔符OFS

没有指定输出字段分隔符的时候一般是以空格隔开

例如

awk  -F ',' 'BEGIN {OFS=":"} {print $2,$3}'  /etc/paswd

(3)记录分隔符RS

默认的字段记录分隔符号为换行符

$vi employee-one-line.txt

添加如下内容

101,John Doe:102,Jason Smith:103,Raj Reddy:104,Anand Ram:105,Jane, Miller

$awk -F, '{print $2}' employee-one-line.txt

结果是:

John Doe:102

如果指定了记录分隔符为:则

awk  -F ,  'BEGIN{RS=":"} {print $2}'  employ-one-line.txt

结果为:

John Doe

Jason Smith

Raj Reddy

Anand Ram

Jane Miller

(4)输出记录分隔符ORS

awk默认的输出记录分隔符为ORS

awk   'BEGIN{FS="," ORS="\n----\n"} {print $1,$2} '  employee.txt

John Doe CEO

---

Jason Smith IT Manager

---

Raj Reddy Sysadmin

---

Anand Ram Developer

---

Jane Miller Sales Manager

(5)记录序号NR 和FNR

NR在循环处理过程中,处理第二个文件的时候,NR继续加1,而FNR则是在处理第二个文件开始,FNR重新从1开始记录序号。

(6)变量

是由数字字母和下划线组成。

- 取反

+ 取正,返回数字本身

-- 自减

++ 自增

算术运算符

+   -   *   /   %

还有比较运算符,赋值运算符,比较简单

== 等于

&& 且

||  或

!= 不等于

正则表达式操作符

~ 匹配

!~  不匹配

(7)循环等语句

if   else

while

do   while

for

break语句

continue

exit 

  • 15
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值