正则表达式和文本处理工具二

一:整理博客,内容包含awk、变量、运算符、if多分支

     awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

-F 定义字段分隔符,默认的分隔符是连续的空格或制表符

使用option中的-F参数定义间隔符号

用$1,$2,$3等的顺序表示files中每行以间隔符号分隔的各列不同域

NF变量表示当前记录的字段数

-v 定义变量并赋值 也可以借用次方式从shell变量中引入

定址方法: 正则,变量,比较和关系运算

正则需要用//包围起来 
^ 行首
$ 行尾
. 除了换行符以外的任意单个字符
* 前导字符的零个或多个
.* 所有字符
[] 字符组内的任一字符
[^] 对字符组内的每个字符取反(不匹配字符组内的每个字符)
^[^] 非字符组内的字符开头的行
[a-z] 小写字母
[A-Z] 大写字母
[a-Z] 小写和大写字母
[0-9] 数字
\< 单词头 单词一般以空格或特殊字符做分隔,连续的字符串被当做单词
\> 单词尾

AWK变量

NR变量定址 
NR 表示AWK读入的行数
FNR表示读入行所在文件中的行数

NR 当前记录的个数(全部文件连接后的统计) 
FNR 当前记录的个数(仅为当前文件的统计,非全部)
FS 字段分隔符 默认为连续空格或制表符,可以使用多个不同的符号做分隔符 -F[:/]
OFS 输出字符的分隔符 默认是空格

运算符
+ - * / % ++ --
转义序列
\\ \自身
\$ 转义$
\t 制表符
\b 退格符
\r 回车符
\n 换行符
\c 取消换行

     if是条件判断语句,只有if的条件成立(表达式的值为真)后,才会执行if部分的代码,否则将会执行else的代码。如果是if... if,则必须满足第一个if同时满足第二个if,才会执行后面的代码。 

Linux Shell : Test命令参数解析

格式: test conditions
test -n string : string 不为空 
test -z string : string 为空

test int1 -eq int2  : int1 == int 2
test int1 -ne int2  : int1 != int2 
test int1 -gt int2   : int1 > int2 
test int1 -ge int2  : int1 >= int2 
test int1 -lt int2    : int1 < int2 
test int1 -le int2   : int1 <= int2
test -r filename   : 用户对文件filename有读权限
test -w filename  : 用户对文件filename有写权限
test -x filename   : 用户对文件filename有可执行权限
test -f filename   : 文件filename为普通文件
test -d filename  : 文件filename为目录
test -c filename  : 文件filename为字符设备文件
test -b filename  :文件filename为块设备文件
test -s filename  : 文件filename大小不为零
test -t fnumb      : 与文件描述符fnumb(默认值为1)相关的设备是一个终端设备
test ! -s empty   : empty 为空
test -a       : And 
test -o       : Or
注意test命令和[ ]中括号作用是一样的

二:awk文本处理
打印uid在30~40范围内的用户名。

#awk -F: '$3 >=30 && $3 <= 40{print $1}' aa.txt

打印第5-10行的行号和用户名

#awk -F: 'NR >= 5 && NR <= 10{print NR,"---",$1}' aa.txt 

打印奇数行

#awk -F: 'NR%2==1{print NR,"---",$0}' aa.txt  或  #awk -F: 'NR%2{print NR,"---",$0}' aa.txt

打印偶数行

#awk -F: 'NR%2==0{print NR,"---",$0}' aa.txt

打印字段数大于5的行

#awk -F: 'NF>5{print $0}' aa.txt

打印UID不等于GID的用户名

#awk -F: '$3!=$4{print $1}' aa.txt

打印没有指定shell的用户

#awk -F '/nologin$/{print $1}' aa.txt

 

posted @ 2017-03-23 17:32  Michael--chen  阅读(297)  评论(0编辑  收藏  举报