awk模式
模式类型:
- 正则表达式
- 关系表达式
- 组合的Pattern
- Pattern1,Pattern2
- BEGIN
- END
1,正则表达式
模式类型可以为正则表达式,正则表达式的规则需要写在//中
实例:
查询当前目录下包含se或者sh的记录:
ll ~ | awk '/s[eh]/{print $0}'
2,关系表达式
运算符 | 含义 |
---|---|
< | 小于 |
<= | 小于等于 |
== | 等于 |
!= | 不等于 |
>= | 大于等于 |
> | 大于 |
实例:
查询当前目录下大于800字节的文件或者目录
ll ~ | awk '&5>800{print $0}'
3,组合的模式
实例:
查询当前目录下大于800字节小于8000字节的文件或者目录
ll ~ | awk '$5 > 800 && $5 < 8000{print $0}'
4,pattern1,pattern2
实例:
匹配当前文件夹下从等于200字节的文件和目录一直匹配到等于4000字节的文件和目录
ll ~ | awd '$5==807,$5==472{print $0}'
5,BEGIN
BEGIN 模式指定的操作是在读取任何输入之前执行,且只执行一次。
实例:
在打印出当前文件下所有文件和目录之前打印1到9
ll ~ | awk 'BEGIN{print "1 2 3 4 5 6 7 8 9"}{print}'
6,END
END 模式指定的操作是在读取所有的输入后执行
实例:
在打印出当前文件夹下所有的文件和目录后,打印print–end!
ll ~ | awk '{print}END{print "print--end!"}'
awk命令基本选项
awk [-F fs] [-v var=value] [-f prog-file] [ 'program text' ] [file...]
- -F:预先指定字段分隔符(默认是空格)
- -f:指定awk命令要执行的程序文件
- -v:预先为awk程序指定变量
-F
实例:
打印/etc/passwd的内容用冒号分隔:
awk -F: '{print $1}' /etc/passwd
-f
实例:
打印出testf的内容
新建testf文本:
vim testf
BEGIN{print "hello lcc"}
awk -f testf
-v
实例:
var=100
echo | awk -v variable=$var '{print variable}'
awk内置变量
变量名 | 说明 |
---|---|
FIILENAME | 当前输入文件名,如有多个文件,则只表示第一个 |
$0 | 当前记录的内容 |
NF | 当前记录字段数,列数 |
$N | N表示字段号,最大值为NF变量的值 |
FS | 字符按分割符,默认为空格 |
RS | 输入记录分隔符,默认为“\n”,即一行为一个记录 |
NR | 已经读入的记录数,行数 |
FNR | 当前输入文件的记录数 |
OFS | 输出字段分割符,默认为空格 |
ARGC | 命令行参数的数目 |
ARGIND | 命令行中当前文件的位置 |
ARGV | 命令行参数的数组 |
新建test.txt
vim test
I love linux
www.linux.com
实例1:
将test的每一个字符按单独显示为一行
awk '{print $1 "\n" $2 "\n" $3}' test
实例2:
将test的第二行中的点换成以空格分割
awk '{print $1 "\t" $2 "\t" $3}' test
计算文件总大小
新建num文件:
vim num
BEGIN{
print "BYTES","\t","FILE"
}
{
sum+=$5
filenum++
print $5,"\t",$9
}
END{
print "Totle:",sum,"bytes("filenum-1 "files)"
}
格式化打印
常用的三个:
- %s:字符串
- %d:十进制整数
- %f:浮点格式