Linux中gsub函数,linux文本处理三剑客之 awk 命令

文章目录

1. awk是什么

2.awk的编程模型

3.awk模式匹配

3.1 第一种调用方式,将模式和动作写在terminal里面 后面接一个文件

3.2 -f 第二种 将awk写在一个文件里

3.3 以awk脚本的形式来执行awk命令

4.记录和域

5.关系和布尔运算

5.1 ~匹配正则表达式

6.表达式

7.系统变量

8.格式化输出

9.内置字符串函数

(1)gsub函数

(2)index

(1)length

10 练习

11.宿主目录是什么

1. awk是什么

AWK 是一个优良的文本处理工具,Linux 及 Unix 环境中现有的功能最强大的数据处理引擎之一。它的分类有 NAWK GAWK AWK。AWK 经过改进生成的新的版本 GAWK,NAWK,现在默认linux系统下日常使用的是 GAWK。

它也是行处理模式.

7b495779ae7459260a28bc9e75408d24.png

c473c5409942e20d59b2af6115364590.png

2.awk的编程模型

83132ea59c7b7355696c8a179d0f86ba.png

3.awk模式匹配

ff3111f922f1a4fa285eabf8f8500b0e.png

3.1 第一种调用方式,将模式和动作写在terminal里面 后面接一个文件

模式是/ /中间的,动作是{ }之间的,此语句 的意思是一旦读入的输入文件行是空行,就打印this is a …

input文件里面有空白内容

0f5675902bb832afe61393a830b007ba.png

e73f05f071478d22c9505527f42394b0.png

3.2 -f 第二种 将awk写在一个文件里

最好将文件名写成.awk

586fc6455858ed7d2e2778174e48b142.png

3.3 以awk脚本的形式来执行awk命令

和文件名无关

2264a404f64bf53e887e1e9dae8e74b3.png

7a77d2d03f3a9c38c2d6c68391b06521.png

1e4690774c2c15a77e2bac0f091e672c.png

4.记录和域

cecb9923bc7a8a08e436f0565569ce60.png

Tab键会被默认为连续的空格

33eb16e88e39df11c7fc0b851142c4c2.png

对文本文件分域处理是Linux系统处理文本的方式,如sort,uniq.

(1)$后跟数字

2e7239f19680aecb5a13f6b89c8ea747.png

d8e9f3926030d217469a3db8a8fe1f7d.png

(2)$后跟表达式`

9cb0ca979a0203871e2f0a9641c3d79e.png

(3)tab被默认为连续的空格

4656d21e3e385ef277f63e8d0a1699a7.png

(4)-F 改变分隔符 以tab键为例

bf5eab765a7ea3d442bb3afdfd42ae76.png

bdb465ab1c01bd02a0263ee37661a114.png

多个tab键怎么办

用+号,不管有多少个tab ,都看成一个tab键

9012e821578ea4ccafd1af7207a7e2a8.png

23c2e7dc8a5570f54c1e2ef962080610.png

(5)环境变量FS和BEGIN改变分隔符

9931a6a13350484c7b79851754e60f7d.png

71894563a25a909754cdd7d936a94021.png

5.关系和布尔运算

ebb660df128f337abdd5a492b9718ed1.png

0eb3b1dd5ad1011deac80f277dd953e2.png

5.1 ~匹配正则表达式

~ 匹配正则表达式 !~ 不匹配正则表达式

awk 'BEGIN {FS=":"} $1~/root/' passwd#找到文件中第一域匹配root的部分输出该行

awk 'BEGIN {FS=":"} $0~/root/' passwd#找到文件中全部域匹配root的部分输出该行

awk 'BEGIN {FS=":"} $0!~/home/' passwd #找到文件中全部域不匹配root的部分输出该行

ce333b9624956725a7199f22836d38f3.png

awk 'BEGIN {FS=":"} {if ($3 passwd

awk 'BEGIN {FS=":"} {if ($3==1||$4==10) print$0}' passwd

51024f993190d13206bf23571e8eeace.png

6.表达式

跟其他编程语言一样,awk表达式用于存储、操作和获取数据。一个awk表达式可由数值、字符常量、变量、操作符、函数和正则表达式自由组合而成

变量是一个值的标识符,定义awk变量非常方便,只需要定义一个变量名并将值赋给它即可

注意: 1.变量名只能包含字母、数字和下划线,而且不能以数字开头 2.定义awk变量无须声明变量类型,每个变量有两种类型的值:字符串值和数值。awk根据表达式上下文来确定使用哪个值;变量的默认数值为0,默认字符串值为空

awk '/^$/{print x++}' input#先输出x再+1

awk '/^$/{print ++x}' input #先+1再输出x,即输出空白行行号

3a579cd370311bd616726bf62b5c5115.png

7.系统变量

awk定义了很多的内建变量用于建设环境信息,我们称它为系统变量。

这些系统变量可分为:

第一种用于改变awk的默认值,如域分隔符;

第二种用于定义系统值,在处理文本时可以读取这些系统值。如记录中的域数量,当前记录数、文件名等。

NF:记录的域数量

NR:显示当前的记录数,该值根据读取输入文件的进度而变化。读取第一条记录 时,NR=1;读取到末尾时,NR为包含该文件所包含的记录数

$0:打印记录的所有域

FILENAME:表示当前的输入文件名

awk ' BEGIN {FS=","} {print NF,NR,$0} END{print FILENAME}' test3

25c6db91387dc12cd873bac5f196f98d.png

8.格式化输出

前面的例子只涉及awk如何输入文件进行处理,对于输入的格式并未规定。

而awk的一大主要功能是产生报表,报表就是要求按照于定的格式输出。awk借鉴C语言的语法,定义了printf输出语句,它可以规定输出的格式。

awk 'BEGIN {FS=","} {printf("%s\t%d\n",$2,$3)}' test3

awk 'BEGIN {FS=","} {printf("%s\t%d\n",$2,$5)}' test3

awk 'BEGIN {printf("%c\n",65)}' #awk的ascii字符的转换

awk 'BEGIN {printf("%f\n",2020)}' #awk的字符型字符的转换

awk 'BEGIN {printf("%.3f\n",2020)}'

awk 'BEGIN {printf("%.3f\n",2020.021515)}'

awk 'BEGIN {FS=":"} {printf("%-15s\t%s\n",$1,$3)}' test3

#-15表示字符串长度控制为为15位,若字符串不足15位,则用空格补充。

\s代表字符串 第二个域

\t代表tab键 第3个域

每输出两个域换行

fe7c305ab222e16b30304e2733a30718.png

9.内置字符串函数

(1)gsub函数

gsub函数执行字符串替换功能,将第一个字符串替换为第二个字符串

awk 'BEGIN {FS=":";OFS=":"} gsub(/root/,"haha",$1) {print $0}' passwd #此处的OFS表示输出指定分隔符

awk 'BEGIN {FS=":"} gsub(/root/,"haha",$1) {print $0}' passwd #不指定PFS的话默认以空格为分隔符输出

32aca56d778785a0c8a0ecb45a0cc163.png

(2)index

index返回第二个字符串在第一个字符串出现的首位置

awk 'BEGIN {print index("telephone","ph")}'

5dfee004deba58d68731c8b6ce303fc0.png

(1)length

length返回字符串长度

awk 'BEGIN {print length("telephone")}'

a205dcf21aada7094a2d7542666bf3f5.png

10 练习

fab0575b95a4877cf03335ef2499615a.png

1

e08b3c6116635bbb1165e04ba483a74b.png

2

3982dfe959622cf37bce4068aa4da7df.png

3

d738366b3ea203745bbd7432afeae872.png

4

6e2fa8a73683bdfd44bf3b01f7a83eec.png

11.宿主目录是什么

上级目录或父目录。

1:在linux中,每个用户都有一个自己存放数据的目录。如果是超级用户root,则其宿主目录缺省情况下是:/root。

2:这个是找到的UNIX 系统下每个用户都拥有的一个目录。它是用户登录进入时的当前目录,而且随时可通过 cd(改变目录)命令回到这个目录下,cd 后不需要加任何路径名。

3:用户文件通常都被保存在宿主目录及其子目录下linux和unix差不多。

5

1d6a44f411ae668c53abdd6d52968f21.png

6

7349ec340df3b4c2cdf59777ef118b7f.png

7.

用NR对2取模,当余数为1时,awk的执行模式判断为真,就会执行默认的{print}输出奇数行,当余数不为1时,判断为假,不执行输出,所以偶数行就不会输出。

9666481542ac5646c5ae6ebbfa552ac6.png

8

bd373a967f9ae218d62393d33101f7d0.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值