2018.4.27 六周第三次课 (awk工具)

awk工具介绍

awk也是流行的编辑器,针对文档中的行来操作,一行一行的操作;
awk具备sed的所有功能,而且更强大。

awk截取文档中的某个段落,示例如下:

  • -F选项的作用是指定分隔符,如果不加-F选项,以空格或者tab为分隔符。
  • print为打印的动作,用来打印某个字段。$1为第一段,$2为第二段,$0表示整行。
    • 示例1:

      [[email protected] ~]# mkdir awk #创建个awk目录
      [[email protected] ~]# cp /etc/passwd awk/test.txt #拷贝个文件过来并且修改名字
      [[email protected] ~]# cd awk/
      [[email protected] awk]# ls
      test.txt
      [[email protected] awk]# awk -F ‘:‘ ‘{print $1}‘ test.txt #打印出来第一段,分隔符为冒号“:”
      root
      bin
      daemon
      adm
      lp
      sync
      shutdown
      halt
      mail

    • 示例2,打印出来所有的内容:$0

      [[email protected] awk]# awk ‘{print $0}‘ test.txt #$0表示整行,所有。
      root:x:0:0:root:/root:/bin/bash
      bin:x:1:1:bin:/bin:/sbin/nologin
      daemon:x:2:2:daemon:/sbin:/sbin/nologin
      adm:x:3:4:adm:/var/adm:/sbin/nologin

匹配字符或者字符串

  • 打印出来包含oo的行。

    [[email protected] awk]# awk ‘/oo/‘ test.txt
    root:x:0:0:root:/root:/bin/bash
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin

  • 打印第一行的第一段包含oo的行。

    [[email protected] awk]# awk -F ‘:‘ ‘$1 ~ /oo/‘ test.txt
    root:x:0:0:root:/root:/bin/bash

  • 多次打印,多次匹配test,示例如下:

    [[email protected] awk]# awk -F ‘:‘ ‘/root/ {print $1,$3} /bash/ {print $1,$3,$7}‘ test.txt
    root 0
    root 0 /bin/bash
    operator 11
    #这命令的意思是 第一和第三段,包含root的字符,和第一段 第三段 第七段包含bash的字符打印出来。

条件操作符

awk中可以用逻辑符号进行判断,比如==就是等于,也可以理解为精确匹配;
另外还有>、>=、<等,在和数字比较时,
若把比较的数字用双引号因起来,那么awk不会认为是数字,
而会认为是字符,不加双引号则会认为是数字。
  • 示例1,精确匹配:

    [[email protected] awk]# awk -F ‘:‘ ‘$3=="0"‘ test.txt #数字0
    root:x:0:0:root:/root:/bin/bash

  • 示例2,列出来第三段大于等于500的行打印出来

    [[email protected] awk]# awk -F ‘:‘ ‘$3>=500‘ test.txt
    polkitd:x:999:997:User for polkitd:/:/sbin/nologin
    chrony:x:998:996::/var/lib/chrony:/sbin/nologin

  • 示例3,!=表示不匹配,第七段不等于/sbin/nologin的有哪些,如下:

    [[email protected] awk]# awk -F ‘:‘ ‘$7!="/sbin/nologin"‘ test.txt
    root:x:0:0:root:/root:/bin/bash
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt

  • 可以使用&&和||,他们分别表示并且和或者,用法如下:

    [[email protected] awk]# awk -F ‘:‘ ‘$3<$4‘ test.txt
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

  • ||或者的用法如下:

    [[email protected] awk]# awk -F ‘:‘ ‘$3>100 || $7=="/sbin/nologin"‘ test.txt
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin

awk的内置变量

awk常用的变量有OFS,NF和NR,OFS和-F选项有类似的功能;
也是用来定义分隔符的,但是它实在输出的时候定义;
NF表示用分割符分割后一共有多少段;
NR表示行号。

OFS的用法如下:

原文地址:http://blog.51cto.com/13646023/2107891

时间: 2024-08-29 00:42:33

2018.4.27 六周第三次课 (awk工具)的相关文章

六周第三次课(1月17日) 9.6/9.7 awk

六周第三次课(1月17日)9.6/9.7awk ==================================================================================================================================================================================================================================

六周第三次课(1月17日)

六周第三次课(1月17日)9.6/9.7 awk awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理.awk有3个不同版本: awk.nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本.awk其名称得自于它的创始人 Alfred Aho .Peter Weinberger 和 Brian Kernig

六周第三次课(3月14日)

六周第三次课(3月14日)9.6/9.7 awk扩展 9.6 awk(上)把passwd文件拷贝到目录awk,做实验. 打印文档中的某段 打印第1段的用法示例如下: 打印所有段的用法示例如下:不需要制定分隔符 不制定分隔符,会以空格和空白字符为为空隔符去打印.创建一个测试文件. 打印第1第3第4段的用法.中间要加逗号. 自定义分隔符为#,自定义的内容要加"" 打印包含某字符或字符串的行 打印含有oo的行,命令如下: 打印第1段含有oo的行,命令如下: 可以分段匹配,比sed强. awk

2018.4.20 五周第三次课

shell介绍 shell脚本在日常的Linux系统管理中是必不可少的: shell是系统跟计算机硬件交互时使用的中间介质. shell是一个命令解释器,提供用户和机器之间的交互: 支持特定语法,比如逻辑判断.循环: 每个用户都可以由自己特定的shell: centOS7默认shell为bash(Bourne Agin shell) 还有zhs.ksh等. shell记录命令历史,默认保存至 .bash_history 文件中 概念:我们执行过的命令Linux都会记录,预设可以记录1000条命令

三周第三次课(12月27日) 3.7 su命令 3.8 sudo命令 3.9 限制root远程登录

三周第三次课(12月27日)3.7 su命令3.8 sudo命令3.9 限制root远程登录 su命令: 用户和工作组管理: su命令用于切换当前用户身份到其他用户身份, 变更时须输入所要变更的用户帐号与密码. 语法: su(选项)(参数) 选项: -c<指令>或--command=<指令>:执行完指定的指令后,即恢复原来的身份: -f或--fast:适用于csh与tsch,使shell不用去读取启动文件: -l或--login:改变身份时,也同时变更工作目录,以及HOME,SHE

五周第三次课(1月10日) 8.1 shell介绍 8.2 命令历史 8.3 命令补全和别名 8.4 通配符 8.5 输入输出重定向

五周第三次课(1月10日)8.1 shell介绍8.2 命令历史8.3 命令补全和别名8.4 通配符8.5 输入输出重定向 history命令: 用于显示指定数目的指令命令,读取历史命令文件中的目录到历史命令缓冲区和将历史命令缓冲区中的目录写入命令文件. 该命令单独使用时,仅显示历史命令,在命令行中,可以使用符号!执行指定序号的历史命令.例如,要执行第2个历史命令,则输入!2. 历史命令是被保存在内存中的,当退出或者登录shell时,会自动保存或读取.在内存中,历史命令仅能够存储1000条历史命

linux五周第三次课(3月7日)笔记

五周第三次课(3月7日)8.1 shell介绍8.2 命令历史8.3 命令补全和别名8.4 通配符8.5 输入输出重定向 搜索看一下有没有这两个shell,不安装. 8.2 命令历史 用过的命令,在/root/.bash_history存着 用cat命令查看一下/root/.bash_history 可以用命令history查看一下之前使用过的命令 history -c 修改了/etc/profile 配置文件,运行source命令,使其生效. 指定什么时候运行. 变量变了. 历史命令. 想要生

Linux学习笔记第六周第四次课(3月15日)

六周第四次课(3月15日) 复习 扩展 打印某行到某行之间的内容http://ask.apelearn.com/question/559 按关键词打印内容,#sed -n '/\[abcd\]/,/\[rty\]/'p test 按行数打印内容,# sed -n '4,8'p test sed转换大小写 http://ask.apelearn.com/question/7758 sed中,使用\u表示大写,\l表示小写 1. 把每个单词的第一个小写字母变大写: sed 's/\b[a-z]/\u

Linux20180502 六周第四次课(5月2日)

六周第四次课(5月2日)复习 扩展打印某行到某行之间的内容http://ask.apelearn.com/question/559 sed转换大小写 http://ask.apelearn.com/question/7758 sed在某一行最后添加一个数字http://ask.apelearn.com/question/288 删除某行到最后一行 http://ask.apelearn.com/question/213 打印1到100行含某个字符串的行 http://ask.apelearn.c