美文网首页
2018-04-17

2018-04-17

作者: 在下小神仙呀 | 来源:发表于2018-04-17 15:50 被阅读0次

> 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/

相关文章

网友评论

      本文标题:2018-04-17

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