awk命令:

    awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。


语法:

    awk [options] 'script' var=value file(s)

    awk [options] -f scriptfile var=value file(s)


常用选项:

    -F :指定分隔符;如果不加-F指定,则以空格或者tab为分隔符

(awk功能强大,直接列举常用到的)


示例:

  1. awk -F ':' '{print $1}' 1.txt 截取文档中的某段,$0表示整一行

  2. awk -F':' '{print $1"#"$2"#"$3"#"$4}' 1.txt 使用自定义字符连接每个段

  3. awk '/oo/' 1.txt 匹配字符或字符串

  4. awk -F ':' '$1 ~/oo/' 1.txt 针对某个段匹配(~表示匹配和~!表示不匹配)

  5. awk -F ':' '/root/ {print $1,$3}; $1 ~/test/; $3 ~/20/' 1.txt 多次匹配

  6. 条件操作符==, >,<,!=,>=;<=

    awk -F ':' '$3=="0"'  1.txt;

    awk -F ':' '$3>="500"' 1.txt;

    awk -F ':' '$7!="/sbin/nologin"'  1.txt;

    awk -F ':' '$3<$4' 1.txt ;

    awk -F ':' '$3>"5" && $3<"7"' 1.txt

    awk -F ':' '$3>"5" || $7=="/bin/bash"' 1.txt

  7. awk内置变量 NF(段数)  NR(行数);($NF是最后一段的值, 而NR则是行号)

    head -n3 1.txt | awk -F ':' '{print NF}'

    head -n3 1.txt | awk -F ':' '{print $NF}'

    head -n3 1.txt | awk -F ':' '{print NR}'

  8. awk 'NR>20' 1.txt 打印20行以后的行

  9. awk -F ':' '$1="root"' 1.txt 更改某个段的值

  10. awk -F ':' '{$7=$3+$4; print $0}' 1.txt 第三段和第四段值相加,并赋予第七段

  11. awk -F ':' '{(tot=tot+$3)}; END {print tot}' 1.txt 计算第三段的总和

  12. awk -F ':' '{if ($1=="root") print $0}' 1.txt awk中也可以使用if关键词


练习1:

  1. 用awk 打印整个test.txt (以下操作都是用awk工具实现;cp /etc/passwd test.txt)

  2. 查找所有包含 ‘bash’ 的行

  3. 用 ‘:’ 作为分隔符,查找第三段等于0的行

  4. 用 ‘:’ 作为分隔符,查找第一段为 ‘root’ 的行,并把该段的 ‘root’ 换成 ‘toor’ (可以连同sed一起使用)

  5. 用 ‘:’ 作为分隔符,打印最后一段

  6. 打印行数大于20的所有行

  7. 用 ‘:’ 作为分隔符,打印所有第三段小于第四段的行

  8. 用 ‘:’ 作为分隔符,打印第一段以及最后一段,并且中间用 ‘@’ 连接 (例如,第一行应该是这样的形式'root@/bin/bash')

  9. 用 ‘:’ 作为分隔符,把整个文档的第四段相加,求和


  1. awk '{print $0}' test.txt

  2. awk '/bash/' test.txt 

  3. awk -F':' '$3=="0"' test.txt

  4. awk -F':' '$1=="root"' test.txt |sed 's/root/toor/'

  5. awk -F':' '{print $NF}' test.txt 

  6. awk -F':' 'NR>20' test.txt 

  7. awk -F':' '$3<$4' test.txt 

  8. awk -F':' '{print $1"@"$NF}' test.txt 

  9. awk -F':' '{(sum+=$4)}; END {print sum}' test.txt


详细文档可以man一下; 或者查看:http://man.linuxde.net/awk