AWK
用法:awk 选项 “命令语句” 文件名
选项部分
- -F 定义字段分割符号,默认的分隔符是空格。
"-F:" 这样就把分隔符改成了冒号。
效果和修改FS一样
- -F ‘[]’ 使用多个分隔符
"-F '[ ,]' 先使用空格分隔,再把结果用,分隔。
- -v 定义变量并赋值
-v num=1
#这样就定义了一个变量num,在后面使用时,num可以直接用,不用加$符号。
- -f 从脚本中读取awk命令
命令部分
- NF : 每行的列数
#可以在print里面输出每行的列数,也可以直接'NF == 2'输出只有两列的那些行
- NR : 每行的行号
- FNR : 各文件分文件计数行数
#可以在print里面输出行号,也可以直接'NR == 2'输出第二行
- FS : 每行的分隔符,默认是空格
- OFS : 每行输出的分隔符,默认是空格
- RS : 输入记录的分行符,默认是回车
- ORS : 输出记录的分行符,默认是回车
- FILENAME : 当前文件名
- length : 当前行的字符总长度,只能用来比较,不能用来输出
# 输出a.txt中长度大于9的行
$awk 'length>9' a.txt
BEGIN和END的用法
$awk 'BEGIN{print "开始处理"; FS=":"; OFS="--"}; {print $1, $NF}; END{print "处理完毕"}' a.txt
格式化输出
正则匹配
~ 表示模式开始。/模式/ 中是模式。
1. 按列匹配
$awk '$1$2 ~ /aa/ {print $0}' a.txt
- $1$2 : 第一列与第二列中进行匹配
- ~ : 匹配开始
- /aa/ : 以aa开头的词
2. 每行通配
# 输出包含"aa" 的行
$awk '/aa/' a.txt
3. 忽略大小写(测试失败)
# 输出包含"aa"、"Aa"、"aA"、"AA" 的行
$awk 'BEGIN{IGNORECASE=1} /aa/ ' a.txt
4. 取反
# 输出第一列不包含"aa" 的行
$awk '$1 !~ /aa/ {print $0}' a.txt