美文网首页
awk内建函数

awk内建函数

作者: output | 来源:发表于2018-03-20 16:30 被阅读14次

内建函数

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内建函数

    内建函数 length() 获得字符串长度 split() 将字符串按分隔符分隔,并保存至数组 getline 从...

  • Python_8_Python内建函数-迭代器

    1. 内建函数 1 2. 内建函数 2 3. 内建函数 3 4. 内建函数 4 5. 内建函数 5 6. 内建函数...

  • awk 处理字符

    一、split 初始化和类型强制 awk的内建函数split允许你把一个字符串分隔为单词并存储在数组中。你可以自己...

  • linux下awk内置函数的使用(split/substr/le

    一、split函数 awk的内建函数split允许你把一个字符串分隔为单词并存储在数组中。你可以自己定义域分隔符或...

  • 18-文本处理三剑客之awk

    本章内容 ◆ awk介绍◆ awk基本用法◆ awk变量◆ awk格式化◆ awk操作符◆ awk条件判断◆ aw...

  • 2017 09-04 AWK

    本章主要学习内容awk介绍 awk基本用法 awk变量 awk格式化 awk操作符 awk条件判断 a...

  • 【技术案例】跟老男孩学运维-awk项目案例

    一个awk数组应用案例 [TOC] 0.技术点: awk awk数组 awk判断 awk数组赋值 awk函数spl...

  • 文件处理

    文件的内建函数: 内建函数方法: open()打开文件 read()读取输入 readline(...

  • python中常用的内建函数

    python中常用的内建函数 总结了python中常用的内建函数。 字符串内建函数 join 拼接字符串 完整的简...

  • 12-27 day4 python的字符串内建函数

    Python 的字符串内建函数 Python 的字符串常用内建函数如下: 以下我们来实验部分内建函数: 1.cap...

网友评论

      本文标题:awk内建函数

      本文链接:https://www.haomeiwen.com/subject/tiybqftx.html