awk命令:
awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。
语法:
awk [options] 'script' var=value file(s)
awk [options] -f scriptfile var=value file(s)
常用选项:
-F :指定分隔符;如果不加-F指定,则以空格或者tab为分隔符
(awk功能强大,直接列举常用到的)
示例:
awk -F ':' '{print $1}' 1.txt 截取文档中的某段,$0表示整一行
awk -F':' '{print $1"#"$2"#"$3"#"$4}' 1.txt 使用自定义字符连接每个段
awk '/oo/' 1.txt 匹配字符或字符串
awk -F ':' '$1 ~/oo/' 1.txt 针对某个段匹配(~表示匹配和~!表示不匹配)
awk -F ':' '/root/ {print $1,$3}; $1 ~/test/; $3 ~/20/' 1.txt 多次匹配
条件操作符==, >,<,!=,>=;<=
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
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}'
awk 'NR>20' 1.txt 打印20行以后的行
awk -F ':' '$1="root"' 1.txt 更改某个段的值
awk -F ':' '{$7=$3+$4; print $0}' 1.txt 第三段和第四段值相加,并赋予第七段
awk -F ':' '{(tot=tot+$3)}; END {print tot}' 1.txt 计算第三段的总和
awk -F ':' '{if ($1=="root") print $0}' 1.txt awk中也可以使用if关键词
练习1:
用awk 打印整个test.txt (以下操作都是用awk工具实现;cp /etc/passwd test.txt)
查找所有包含 ‘bash’ 的行
用 ‘:’ 作为分隔符,查找第三段等于0的行
用 ‘:’ 作为分隔符,查找第一段为 ‘root’ 的行,并把该段的 ‘root’ 换成 ‘toor’ (可以连同sed一起使用)
用 ‘:’ 作为分隔符,打印最后一段
打印行数大于20的所有行
用 ‘:’ 作为分隔符,打印所有第三段小于第四段的行
用 ‘:’ 作为分隔符,打印第一段以及最后一段,并且中间用 ‘@’ 连接 (例如,第一行应该是这样的形式'root@/bin/bash')
用 ‘:’ 作为分隔符,把整个文档的第四段相加,求和
awk '{print $0}' test.txt
awk '/bash/' test.txt
awk -F':' '$3=="0"' test.txt
awk -F':' '$1=="root"' test.txt |sed 's/root/toor/'
awk -F':' '{print $NF}' test.txt
awk -F':' 'NR>20' test.txt
awk -F':' '$3<$4' test.txt
awk -F':' '{print $1"@"$NF}' test.txt
awk -F':' '{(sum+=$4)}; END {print sum}' test.txt
详细文档可以man一下; 或者查看:http://man.linuxde.net/awk
转载于:https://blog.51cto.com/11924224/2070688