首页 > 其他 > 详细

awk笔记

时间:2018-10-25 13:09:41      阅读:170      评论:0      收藏:0      [点我收藏+]
awk 
# 内建常量
FILENAME     当前输入文件的名称
FNR          输入文件的记录数
FS           输入分隔符
NF           当前记录的字段数
NR           工作job中的记录数
OFS          输出字段分割符,默认 
ORS          输出记录分隔符,默认\n
RS           输入记录分隔符,默认\n
ARGC         命令行参数的数目。
ARGIND       命令行中当前文件的位置(从0开始算)。
ARGV         包含命令行参数的数组。
CONVFMT      数字转换格式(默认值为%.6g)
ENVIRON      环境变量关联数组。
ERRNO        最后一个系统错误的描述。
FIELDWIDTHS  字段宽度列表(用空格键分隔)。
IGNORECASE   如果为真,则进行忽略大小写的匹配。
OFMT         数字的输出格式(默认值是%.6g)。
RLENGTH      由match函数所匹配的字符串的长度。
RSTART       由match函数所匹配的字符串的第一个位置。
SUBSEP       数组下标分隔符(默认值是\034)。

# 字段引用
$0指当前行
$1,$2,$3...指定记录中的第n个字段,也可指定分隔符
echo one two three four | awk { print $1,$2,$3 }
echo one two three four | awk {OFS="\n" print $1,$2,$3 }


# 字符串函数
sub         匹配记录中最大、最靠左边的子字符串的正则表达式,并用替换字符串替换这些字符串。如果没有指定目标字符串就默认使用整个记录。替换只发生在第一次匹配的 时候
gsub        整个文档中进行匹配
index       返回子字符串第一次被匹配的位置,偏移量从位置1开始
substr      返回从位置1开始的子字符串,如果指定长度超过实际长度,就返回整个字符串
split       可按给定的分隔符把字符串分割为一个数组。如果分隔符没提供,则按当前FS值进行分割
length      返回记录的字符数
match       返回在字符串中正则表达式位置的索引,如果找不到指定的正则表达式则返回0。match函数会设置内建变量RSTART为字符串中子字符串的开始位 置,RLENGTH为到子字符串末尾的字符个数。substr可利于这些变量来截取字符串

# 示例:
awk NR>19&&NR<31 ett.txt          打印20~30行
awk {print NR,$0} /etc/inittab    给目标文件加行号
awk ‘NR==24 {print NR,$0}’ /etc/inittab 输出第24行并且加行号
awk BEGIN{RS="[/]+"} NR==2{print NR,$2} test   以一个或多个/为行的分割符,打印第二行的第二列,列的分隔符为默认的空格,并打印行号
awk -F ":" $5~/^s/{print $0} /etc/passwd  以:为分隔符,打印第5列以s开头的一整行
awk -F "/" $(NF-1)~/(s|)bin/ /etc/passwd    以/为分隔符,匹配倒数第二行的s或者没有s后面是bin的整行 
awk $1~/^(ssh|ftp|mysql)$/{print $1,$2} /etc/services  匹配第一列以ssh或者ftp或mysql开头或者结尾的行

 

awk笔记

原文:https://www.cnblogs.com/wangbin2188/p/9848934.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!