当前位置: 代码网 > it编程>编程语言>Php > awk简介与学习笔记收集

awk简介与学习笔记收集

2024年05月15日 Php 我要评论
awk简介与学习笔记收集

gsub函数作用如sub,但它在整个文档中进行匹配。格式如下:

            gsub (regular expression, substitution string)
            gsub (regular expression, substitution string, target string)

实例:

            $ awk '{ gsub(/test/, "mytest"); print }' testfile
            $ awk '{ gsub(/test/, "mytest"), $1 }; print }' testfile

第一个例子在整个文档中匹配test,匹配的都被替换成mytest。

第二个例子在整个文档的第一个域中匹配,所有匹配的都被替换成mytest。

index函数返回子字符串第一次被匹配的位置,偏移量从位置1开始。格式如下:

          index(string, substring)

实例:

            $ awk '{ print index("test", "mytest") }' testfile

实例返回test在mytest的位置,结果应该是3。

length函数返回记录的字符数。格式如下:

            length( string )
            length

实例:

            $ awk '{ print length( "test" ) }' 
            $ awk '{ print length }' testfile

第一个实例返回test字符串的长度。

第二个实例返回testfile文件中第条记录的字符数。

substr函数返回从位置1开始的子字符串,如果指定长度超过实际长度,就返回整个字符串。格式如下:

            substr( string, starting position )
            substr( string, starting position, length of string )

实例:

            $ awk '{ print substr( "hello world", 7,11 ) }' 

上例截取了world子字符串。

match函数返回在字符串中正则表达式位置的索引,如果找不到指定的正则表达式则返回0。match函数会设置内建变量rstart为字符串中子字符串的开始位置,rlength为到子字符串末尾的字符个数。substr可利于这些变量来截取字符串。函数格式如下:

            match( string, regular expression )

实例:

            $ awk '{start=match("this is a test",/[a-z]+$/); print start}'
            $ awk '{start=match("this is a test",/[a-z]+$/); print start, rstart, rlength }'

第一个实例打印以连续小写字符结尾的开始位置,这里是11。

第二个实例还打印rstart和rlength变量,这里是11(start),11(rstart),4(rlength)。

toupper和tolower函数可用于字符串大小间的转换,该功能只在gawk中有效。格式如下:

            toupper( string )
            tolower( string )

实例:

            $ awk '{ print toupper("test"), tolower("test") }'

split函数可按给定的分隔符把字符串分割为一个数组。如果分隔符没提供,则按当前fs值进行分割。格式如下:

            split( string, array, field separator )
            split( string, array )

实例:

            $ awk '{ split( "20:18:00", time, ":" ); print time[2] }'

上例把时间按冒号分割到time数组内,并显示第二个数组元素18。

14.8.2. 时间函数
systime函数返回从1970年1月1日开始到当前时间(不计闰年)的整秒数。格式如下:

            systime()

实例:

            $ awk '{ now = systime(); print now }'

strftime函数使用c库中的strftime函数格式化时间。格式如下:

            systime( [format specification][,timestamp] )

table 3. 日期和时间格式说明符

格式 描述 
%a 星期几的缩写(sun) 
%a 星期几的完整写法(sunday) 
%b 月名的缩写(oct) 
%b 月名的完整写法(october) 
%c 本地日期和时间 
%d 十进制日期 
%d 日期 08/20/99 
%e 日期,如果只有一位会补上一个空格 
%h 用十进制表示24小时格式的小时 
%i 用十进制表示12小时格式的小时 
%j 从1月1日起一年中的第几天 
%m 十进制表示的月份 
%m 十进制表示的分钟 
%p 12小时表示法(am/pm) 
%s 十进制表示的秒 
%u 十进制表示的一年中的第几个星期(星期天作为一个星期的开始) 
%w 十进制表示的星期几(星期天是0) 
%w 十进制表示的一年中的第几个星期(星期一作为一个星期的开始) 
%x 重新设置本地日期(08/20/99) 
%x 重新设置本地时间(12:00:00) 
%y 两位数字表示的年(99) 
%y 当前月份 
%z 时区(pdt) 
%% 百分号(%) 

实例:

            $ awk '{ now=strftime( "%d", systime() ); print now }'
            $ awk '{ now=strftime("%m/%d/%y"); print now }'

14.8.3. 内建数学函数
table 4. 

函数名称 返回值 
atan2(x,y) y,x范围内的余切 
cos(x) 余弦函数 
exp(x) 求幂 
int(x) 取整 
log(x) 自然对数 
rand() 随机数 
sin(x) 正弦 
sqrt(x) 平方根 
srand(x) x是rand()函数的种子 
int(x) 取整,过程没有舍入 
rand() 产生一个大于等于0而小于1的随机数 

14.8.4. 自定义函数
在awk中还可自定义函数,格式如下:

        function name ( parameter, parameter, parameter, ... ) {
                        statements
                        return expression                  # the return statement and expression are optional
        }

15. how-to
如何把一行竖排的数据转换成横排?

awk '{printf("%s,",$1)}' filename
完整版本
(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com