awk内建函数
内建函数
length()
获得字符串长度
cat score.txt
Marry 2143 78 84 77
Jack 2321 66 78 45
Tom 2122 48 77 71
Mike 2537 87 97 95
Bob 2415 40 57 62
awk '{print $1, length($1)}' score.txt
Marry 5
Jack 4
Tom 3
Mike 4
Bob 3
split()
将字符串按分隔符分隔,并保存至数组
head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
head -1 /etc/passwd|awk '{split($0,arr,/:/);for(i=1;i<=length(arr);i++) print arr[i]}'
root
x
0
0
root
/root
/bin/bash
getline
从输入(可以是管道、另一个文件或当前文件的下一行)中获得记录,赋值给变量或重置某些环境变量
从shell命令date中通过管道获得当前的小时数
date
Tue Mar 20 16:15:52 CST 2018
awk 'BEGIN{"date"|getline;split($4,arr,/:/);print arr[1]}'
16
从文件中获取,此时会覆盖当前的$0。
cat a.txt
a1
a2
cat b.txt
b1
awk '{getline <"a.txt";print $0}' b.txt
a1
awk '{getline <"b.txt";print $0}' a.txt
b1
a2
赋值给变量
awk '{getline a <"a.txt";print $0"---"a}' b.txt
b1---a1
读取下一行(也会覆盖当前$0),此时表示只对偶数行进行处理,如果最后一行是偶数行,也对最后一行处理
cat n.txt
1
2
3
4
5
awk '{getline;total+=$0}END{print total}' n.txt
11
next
作用和getline类似,也是读取下一行并覆盖$0,区别是next执行后,其后的命令不再执行,而是读取下一行从头再执行
跳过以a-s开头的行,统计行数,打印最终结果
awk '/^[a-s]/{next}{count++}END{print count}' /etc/passwd
合并相同列的两个文件
cat e.txt
姓名 学号
张三 00001
李四 00002
王五 00003
cat f.txt
学号 分值
00003 90
00002 75
00001 80
# 这里当读第一个文件时NR==FNR成立,执行a[$1]=$2,然后next忽略后面的。读取第二个文件时,NR==FNR不成立,执行后面的打印命令
awk 'NR==FNR{a[$1]=$2;next}{print $0,a[$2]}' f.txt e.txt
姓名 学号 分值
张三 00001 80
李四 00002 75
王五 00003 90
sub(regex,substr,string)
替换字符串string(省略时为$0)中首个出现匹配正则regex的子串substr
echo 178278 world|awk 'sub(/[0-9]+/,"hello")'
hello world
gsub(regex,substr,string)
与sub()类似,但不止替换第一个,而是全局替换
head -n5 /etc/passwd|awk '{gsub(/[0-9]+/,"----");print $0}'
root:x:----:----:root:/root:/bin/bash
bin:x:----:----:bin:/bin:/sbin/nologin
daemon:x:----:----:daemon:/sbin:/sbin/nologin
adm:x:----:----:adm:/var/adm:/sbin/nologin
lp:x:----:----:lp:/var/spool/lpd:/sbin/nologin
substr(str,n,m)
切割字符串str,从第n个字符开始,切割m个。如果m省略,则到结尾
echo "hello,世界!"|awk '{print substr($0,8,1)}'
界
tolower(str)和toupper(str)
表示大小写转换
echo "hello,世界!"|awk '{print toupper($0)}'
HELLO,世界!
system(cmd)
执行shell命令cmd,返回执行结果,执行成功为0,失败为非0
awk 'BEGIN{if(!system("date>/dev/null"))print "success"}'
success
match(str,regex)
返回字符串str中匹配正则regex的位置
awk 'BEGIN{A=match("abc.f.11.12.1.98",/[0-9]{1,3}./);print A}'
7
参考
awk内建函数的更多相关文章
- linux awk 命令实用手册
0,简介 Linux awk 是一个实用的文本处理工具,它不仅是一款工具软件,也是一门编程语言.awk 的名称来源于其三位作者的姓氏缩写,其作者分别是Alfred Aho,Peter Weinberg ...
- Linux Shell 示例精解(第七章 gawk编程)转载
第七章 gawk功能:gawk编程 7.1.1 数字和字符串常量 初始化和类型强制 在awk中,变量不需要定义就可以直接使用,使用一个变量就是对变量的定义.变量的类型可以试数字.字符串,或者 ...
- 【译】 AWK教程指南 附录C-AWK的内建函数
C.1 字串函数 index( 原字串, 查找的子字串 ) 若原字串中含有欲寻找的子字串,则返回该子字串在原字串中第一次出现的位置,若未曾出现该子字串则返回0. 例如: $ awk 'BEGIN{ p ...
- awk 用法(使用入门)
转自:http://www.cnblogs.com/emanlee/p/3327576.html awk 用法:awk ' pattern {action} ' 变量名 含义 ARGC 命 ...
- 【转】AWK 简明教程
本文转自:http://coolshell.cn/articles/9070.html 有一些网友看了前两天的<Linux下应该知道的技巧>希望我能教教他们用awk和sed,所以,出现了这 ...
- awk 学习笔记
awk的语法有两种形式 awk [options] 'script' var=value file(s) awk [options] -f scriptfile var=value file(s) 选 ...
- 【linux】三十分钟学会AWK
本文大部分内容翻译自我开始学习AWK时看到的一篇英文文章 AWK Tutorial ,觉得对AWK入门非常有帮助,所以对其进行了粗略的翻译,并对其中部分内容进行了删减或者补充,希望能为对AWK感兴趣的 ...
- 测试技能积木-AWK的简要用法
做测试工作,经常要分析日志,有的时候活儿还很脏很累,比如抽取符合某些pattern的行,重新格式化等等.有的时候,我们需要也创造一些测试用数据文件.基于上述两种原因,在Unix Like 系统上,一些 ...
- awk命令
awk 手册 原文 Table of Contents 1. awk简介 2. awk命令格式和选项 2.1. awk的语法有两种形式 2.2. 命令选项 3. 模式和操作 3.1. 模式 3.2 ...
随机推荐
- html5与css交互 API 《一》classList
用过jquery的朋友都知道,jquery提供的方法中(3个)可以很方便的为指定的节点添加.删除类选择器,即addClass.removeClass.toggleClass.具体的用法我这里就不谈了, ...
- html 5 读取本地文件API
代码: <input type="file" name="uploadfile" class="J-upload"> <s ...
- 【Android开发】Webview 和 JS 交互问题
一,安卓原生调用JS代码 1,js代码: function handlePasteDataFromApp(pasteStr) { showInfo('pasteData: aaaaa' + JSON. ...
- 安装并使用Junit
在Eclipse中配置Junit的方法有两种方式: 第一种方法: 1.下载junit的jar包,目前它的版本是junit3.8.1,可以从www.junit.org上下载. 2.在要使用Junit的p ...
- Python实现简单用户注册信息管理系统
运行效果: 注意:运行前请在同一目录下创建一个userdata.bin用于保存用户数据 源代码: 1 # coding:utf-8 2 ''' 3 用户注册信息管理系统 4 功能包括: 5 1.查看全 ...
- 分库分表实现方式Client和Proxy,性能和维护性该怎么选?
大家好,我是[架构摆渡人],一只十年的程序猿.这是分库分表系列的第一篇文章,这个系列会给大家分享很多在实际工作中有用的经验,如果有收获,还请分享给更多的朋友. 其实这个系列有录过视频给大家学习,但很多 ...
- 关于iOS 二维数组,对象映射的问题
数据格式如下: 遇到的问题是二维数组的 对象无法 通过 yymodel 直接实力话 ~~~ -"scoring_probability_distribution": [ -[ -{ ...
- Mybatis分页查询total中的坑
写在前面 今天用mybatis进行分页查询,大家应该都用过pageHelper这个插件,但是在计算总的数据数的时候,page.getTotal()总是返回0,要么就是返回pageSize(),今天给大 ...
- coolshell-初见
首页:https://coolshell.cn/tag/programmer 我是怎么招聘程序员的 https://coolshell.cn/articles/1870.html 程序员需要具备的基本 ...
- 帝国CMS如何互相转移分表之间的数据
最近发现帝国CMS文章数据添加太多到某一张分表中了,如图 这是极其不合理的,需要优化下,所以这篇文章要告诉大家的也就是如何互相转移分表之间的数据. 我现在要将:phome_ecms_news_data ...