Linux-awk学习笔记

今天从linux学习开始,没有什么规划,就简单记下笔记。

Linux awk

简介

  • awk是unix下脚本语言,用来对文本进行处理、分析,生成报告,功能强大.
  • linux使用的命令也是awk,但是实际是GUN的gawk,所以当前学习用的实际是gawk。

===========================================

awk方式

  • awk [options] ’script’ var=value file(s)
  • awk [options] -f scriptfile var=value file(s)

===========================================

options:

  1. -F “”:用来设置处理文本时的域分隔符 默认是空格和tab
    例:awk -F “:” ‘{print $1}’ /etc/passwd
  2. -v var:用来设置要传入脚本的变量,一个变量前一个-v
    例:awk -v var1=1 -v var2=2 ‘{print var}’ /etc/passwd

===========================================

脚本的格式pattern {action}

  • pattern:

/正则表达式/
限定行:如.’NR<=2’输出前两行
BEGIN:不进行记录匹配和处理,一般用来定义变量还有打印输入内容的开头,如列名
END:匹配并处理结束后,当前匹配的行是最后一行,可以用来打印最后一行’END{print}’,输出统计等信息

  • action:

定义变量:var=121;
打印内容:print printf
内置函数:split()
控制语句:if while

预定义的变量

  • $0:当前匹配的整条记录
  • $n:当前记录的第n个域
  • ARGC:命令行中传入参数的个数,不包括option的所有参数都算在内,具体见ARGV
  • ARGV:包含所有命令行参数的数据,在被处理文件前的参数可以在BEGIN中使用,如var,在BEGIN后的参数不能在BEGIN中使用,如asf。

    ARGV[0]=awk
    例:awk -v kk=23 -v jj=3 ‘{print jj,kk,ARGV[0],ARGV[1],ARGV[2],var,ARGC}’ var=5 go asf=5
    3 23 awk var=5 go 5 4

  • NR:当前匹配到的记录条数

  • FNR:同NR,但区分文件,不同文件,分开计算
  • FS:域分隔符设置,域option -F 功能相同,FS=”:”
  • NF:当前匹配记录的域个数
  • RS:记录的分隔符,默认是换行符

===========================================

操作符

“+ - * / % = ^”
“< >= <= !=”
&& || !
空格,可以用来连接字符串

正则表达式,之后再专门学习

匹配符号~

用来在记录或域进行匹配正则表达式
例.awk ‘$1~/^root/’ /etc/passwd

管道与重定向,刚入门还是不深入,之后再看

控制语句

跟c基本一致
1. if( ){}
else if( ){ }
else{ }
2. while( ){ }
3. special for循环用于读取关联数组中的元素。格式如下:

{for (item in arrayname){
print arrayname[item]
}
}

内建函数

字符串函数

  1. sub函数,一个参数为正则表达式,第二个参数为用来替换的字符串,第三个参数可选,用来指定要替换的域如$1,只替换匹配到的一个内容
    sub (regular expression, substitution string, target string)
  2. gsub函数,同sub功能,替换所有匹配到的内容
    gsub (regular expression, substitution string, target string)
  3. index函数返回子字符串第一次被匹配的位置,偏移量从位置1开始。格式如下:
    index(string, substring)
  4. length函数,返回字符串长度
    length(srting) 返回指定字符串长度
    length 返回记录的长度
  5. substr函数返回从位置1开始的子字符串,如果指定长度超过实际长度,就返回整个字符串。格式如下:
    substr( string, starting position, length of string )
  6. split函数可按给定的分隔符把字符串分割为一个数组。如果分隔符没提供,则按当前FS值进行分割。格式如下:
    split( string, array, field separator )

数学函数

  1. int(x)取整,不舍入
  2. sqrt(x)平方根
  3. rand()产生一个0 1之间的随机数

自定义函数

在awk中还可自定义函数,格式如下:
function name ( parameter, parameter, parameter, … )
{
statements
return expression
}

时间函数

  1. systime() 秒单位,从1970.1.1开始
  2. strftime函数使用C库中的strftime函数格式化时间。格式如下:
    systime( [format specification][,timestamp] )

学习文档、内容参考:

http://www.cnblogs.com/wangkangluo1/archive/2012/04/18/2455097.html
http://www.jellythink.com/archives/1252
http://www.cnblogs.com/repository/archive/2011/05/13/2045927.html
http://blog.csdn.net/hyholine/article/details/7254596

2015.10.29乱七八糟的,以后有机会学一下markdown!
2015.11.4 重新编辑了一下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值