内建函数

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

参考

linux基础命令介绍八:文本分析 awk

awk内建函数的更多相关文章

  1. linux awk 命令实用手册

    0,简介 Linux awk 是一个实用的文本处理工具,它不仅是一款工具软件,也是一门编程语言.awk 的名称来源于其三位作者的姓氏缩写,其作者分别是Alfred Aho,Peter Weinberg ...

  2. Linux Shell 示例精解(第七章 gawk编程)转载

    第七章 gawk功能:gawk编程 7.1.1 数字和字符串常量     初始化和类型强制  在awk中,变量不需要定义就可以直接使用,使用一个变量就是对变量的定义.变量的类型可以试数字.字符串,或者 ...

  3. 【译】 AWK教程指南 附录C-AWK的内建函数

    C.1 字串函数 index( 原字串, 查找的子字串 ) 若原字串中含有欲寻找的子字串,则返回该子字串在原字串中第一次出现的位置,若未曾出现该子字串则返回0. 例如: $ awk 'BEGIN{ p ...

  4. awk 用法(使用入门)

    转自:http://www.cnblogs.com/emanlee/p/3327576.html awk 用法:awk ' pattern {action} '  变量名    含义 ARGC   命 ...

  5. 【转】AWK 简明教程

    本文转自:http://coolshell.cn/articles/9070.html 有一些网友看了前两天的<Linux下应该知道的技巧>希望我能教教他们用awk和sed,所以,出现了这 ...

  6. awk 学习笔记

    awk的语法有两种形式 awk [options] 'script' var=value file(s) awk [options] -f scriptfile var=value file(s) 选 ...

  7. 【linux】三十分钟学会AWK

    本文大部分内容翻译自我开始学习AWK时看到的一篇英文文章 AWK Tutorial ,觉得对AWK入门非常有帮助,所以对其进行了粗略的翻译,并对其中部分内容进行了删减或者补充,希望能为对AWK感兴趣的 ...

  8. 测试技能积木-AWK的简要用法

    做测试工作,经常要分析日志,有的时候活儿还很脏很累,比如抽取符合某些pattern的行,重新格式化等等.有的时候,我们需要也创造一些测试用数据文件.基于上述两种原因,在Unix Like 系统上,一些 ...

  9. awk命令

    awk 手册   原文 Table of Contents 1. awk简介 2. awk命令格式和选项 2.1. awk的语法有两种形式 2.2. 命令选项 3. 模式和操作 3.1. 模式 3.2 ...

随机推荐

  1. 攻防世界NewsCenter

    NewsCenter 打开题目是一个搜索框我们首先尝试一下sql注入 判断了一下是使用''进行包裹的字符型sql注入 然后我们需要判断数据库列数 1' order by 3# 回显正常但by4的时候回 ...

  2. HTML5相关文章和资源

    Polyfills HTML5 Cross Browser Polyfills canvas HTML5 JS实现毛玻璃效果(高斯模糊) 高斯模糊的算法Canvas 内部元素添加事件处理 应用场景 P ...

  3. H5优化:canonical标签该如何正确使用

    对一组内容完全相同或高度相似的网页,通过使用Canonical标签可以告诉搜索引擎哪个页面为规范的网页,能够规范网址并避免搜索结果中出现多个内容相同或相似的页面,帮助解决重复内容的收录问题,避免网站相 ...

  4. Checkstyle的安装与使用

    两种安装方法: 方法一: 1.Eclipse中,选择Help->Software Updates->Find and Install 2.选择 Search for new feature ...

  5. 9. Lab: file system

    https://pdos.csail.mit.edu/6.S081/2021/labs/fs.html 1. Large files (moderate) 1.1 要求 Modify bmap() s ...

  6. Java实现单链表的反转

    思路1:初始化一个新的头节点reverseHead,然后遍历旧链表,利用头插法向reverseHead进行插入 思路2: 1.反转相当于数据的更换(1和n,2和n-1,3和n-2)n为链表的长度 2. ...

  7. shiro+springboot分析思路

    文章目录 前言 一.为什么要使用shiro 二.使用步骤 1.如何认证和授权 2.如何获取数据 总结 前言 shiro和spring security等安全框架可以用户管理和权限认证 一.为什么要使用 ...

  8. Jenkins+gitlab手动部署

    环境: Jenkins:172.16.88.221 (安装Jenkins和git命令) gitlab:172.16.88.221 (安装gitlab) 远程部署机器:172.16.88.220 (安装 ...

  9. API管理工具介绍

    ​ 时间都去哪里了 敏捷迭代和团队协作,前后端分离的工作模式几乎是每个互联网公司的常规工作模式. 前后端分离,各自开发的优点很多,其中一项是它只需要提供一个统一的API接口,即可被web,iOS,An ...

  10. 地铁系统ajax人性化操作

    根据选择的城市不同,显示的地铁系统和线路图也不同