> awk基础入门
* linux的一个命令,是一门计算机脚本语言。awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
* awk基本命令
```
awk '{print}' haha.txt //打印全部
awk '{print $1}' haha.txt//打印第一行
awk '{print $3}' haha.txt//打印第三行
awk '{print $1"\t"$3}' haha.txt//打印第一行和第三行用制表符号隔开
awk '{print $NF}' haha.txt //打印出最后一列
awk '{print $(NF-1)}' haha.txt //打印出最后第二列
```
* record 横行 field 竖行
* NR 横行的数量
* NF 竖行的数量
```
[kiosk@foundation45 Desktop]$ awk '{print NR"\t" $1"\t"$3}' haha.txt //打印出行号
```
tips:awk认为空格是将两个拼接起来,所以要想输出有空格的话,必须加逗号,awk的默认分隔符是空格,所以加逗号之后,输出会出现一个空格的效果。也可以连接制表符号等等。
* awk的查找功能
* 查找数字
```
查找第五列中数字是60的
[kiosk@foundation45 Desktop]$ awk ' $5==60{print $0 }' haha.txt
张三1 男 23 157 60
张三17 男 20 155 60
张三4 男 26 159 60
张三43 男 23 151 60
```
* 查找字符串
```
//注意:字符串要加双引号,否则不能查找成功。
[kiosk@foundation45 Desktop]$ awk ' $1=="张三17"{print $0 }' haha.txt
张三17 男 20 155 60
```
* awk的内部变量
| 变量 | 作用 |
| -------- | -------------- |
| NF | 竖行 |
| NR | 横行 |
| FS | 默认输入分割符号 |
| OFS | 默认输出分割符号 |
| FILENAME | 文件名 |
| ENVIRON | 支持队列中系统环境变量的使用 |
| RS | 控制记录分割符 |
| | |
* 改变默认分割符号。
```
[kiosk@foundation45 Desktop]$ awk 'BEGIN{FS=","}{print $2,$1}'
//把逗号作为默认分隔符。
```
* 同时操作两个文件的时候,我们可能需要用文件名来区分,可以打印出filename。
```
[kiosk@foundation45 Desktop]$ awk '{print FILENAME"\t" $2,$1}' haha.txt
```
* 隐藏某一行信息不被输出
```
[kiosk@foundation45 Desktop]$ awk '{$3="xxxx";print $0}' haha.txt
```
```
输出效果:
张三57 男 xxxx 154 59
张三58 男 xxxx 152 52
张三59 女 xxxx 154 56
```
* awk自定义变量和计算
* 自定义变量计算
* awk支持加减乘除运算(先做运算,再做字符串的拼接)
```
[kiosk@foundation45 Desktop]$ awk '{a=2; b=2; print a b}'
//enter键入
22
^C
[kiosk@foundation45 Desktop]$ awk '{a=2; b=2; print a+b}'
4
^C
```
* 正则表达式(Regular Expression)
* ./abc/ abc三个字符连在一起的
* "abc"
* "xxabcxx'
string.txt
```
abc
abcxx
xxabch
a b c
adc
```
```
[kiosk@foundation45 Desktop]$ awk '/abc/{print $0}' string.txt
abc
abcxx
xxabch
```
* ./a.c/ axc类型的
* "abc"
* "acc"
* "adc"
```
[kiosk@foundation45 Desktop]$ awk '/a.c/{print $0}' string.txt
abc
abcxx
xxabch
adc
```
* 转译字符```\``` 用来匹配特殊字符的
* .```/a\.c/``` 只匹配a.c的
* ^ 和 $
* /^abc/ 匹配abc出现在最前面
* /abc$/ abc必须出现在字符串的结尾
* []
* /a[xyz]c/ 匹配axc,ayc,azc这三个,其他的是不可以的。
* /a[a-z]c/ 匹配a和c之间必须出西安一个小写字母。
* /a[a-zA-Z]c/ 出现大小写字母都是可以的。
* 写在[]里面的^表示不是的意思
* /a【^a-z】c/ 不能出现a-z
* ```*```和 +和?
* /a*b/ a可以出现多次
* /a+b/
* /a?b/
网友评论