内建函数

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. servlet中的ServletContext对象

    ServletContext官方叫Servlet上下文.服务器会为每一个Web应用创建一个ServletContext对象.这个对象全局唯一,而且Web应用 中的所有Servlet都共享这个对象(在整 ...

  2. (2)_引言Introduction【论文写作】

  3. Chrome 已经原生支持截图功能,还可以给节点截图!

    昨天 Chrome62 稳定版释出,除了常规修复各种安全问题外,还增加很多功能上的支持,比如说今天要介绍的强大的截图功能. 直接截图 打开开发者工具页面,选择左上角的元素选择按钮(Inspect) W ...

  4. ES6-11学习笔记--Generator

    基本使用 function后面加个*号 function* foo() { for (let i = 0; i < 3; i++) { yield i; // yield不能作为构造函数去使用, ...

  5. Blazor组件自做六 : 使用JS隔离封装Baidu地图

    1. 运行截图 演示地址 2. 在文件夹wwwroot/lib,添加baidu子文件夹,添加baidumap.js文件 2.1 跟上一篇类似,用代码方式异步加载API,脚本生成新的 body > ...

  6. SpringBoot利用自定义注解实现通用的JWT校验方案

    利用注解开发一个通用的JWT前置校验功能 设计的预期: 系统中并不是所有的应用都需要JWT前置校验,这就需要额外设计一个注解Annotation来标识这个方法需要JWT前置校验.例如: @GetMap ...

  7. 面试官:RabbitMQ过期时间设置、死信队列、延时队列怎么设计?

    哈喽!大家好,我是小奇,一位不靠谱的程序员 小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧 文章持续更新 一.前言 RabbitMQ我们经常的使用, ...

  8. git-config配置多用户环境以及 includeIf用法

    git-config配置多用户环境以及 includeIf用法 git-config配置多用户环境以及 includeIf用法 背景 介绍 配置 栗子 背景 开发人员经常遇到这样的问题,公司仓库和个人 ...

  9. 爬虫亚马逊Bestselling类别产品数据TOP100

    1 # -*- coding: utf-8 -*- 2 # @Time : 2020/9/11 16:23 3 # @Author : Chunfang 4 # @Email : 3470959534 ...

  10. error: 'xxxxxx' does not have a commit checked out

    今天完成了毕业设计的主要功能,想上传到Git上给朋友看一下.以前也没用过git,看了一下视频,现学现卖了就是. 在使用git add命令时提示error: 'xxxxxx' does not have ...