`
cfyme
  • 浏览: 275119 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

【转】linux下awk内置函数的使用(split/substr/length)

 
阅读更多

一、split 初始化和类型强制 
       awk的内建函数split允许你把一个字符串分隔为单词并存储在数组中。你可以自己定义域分隔符或者使用现在FS(域分隔符)的值。
格式:

   split (string, array, field separator)
   split (string, array)  -->如果第三个参数没有提供,awk就默认使用当前FS值。


例子:
例1:替换分隔符

1
2
3
time="12:34:56"
out=`echo $time | awk '{split($0,a,":");print a[1],a[2],a[3]}'`
echo $out

 例2:计算指定范围内的和(计算每个人1月份的工资之和)

1
2
3
4
5
6
7
8
9
10
[root@test ~]# cat test.txt
Tom    2012-12-11      car     53000
John   2013-01-13      bike    41000
vivi    2013-01-18      car     42800
Tom    2013-01-20      car     32500
John   2013-01-28      bike    63500
[root@test ~]# awk '{split($2,a,"-");if(a[2]==01){b[$1]+=$4}}END{for(i in b)print i,b[i]}' test.txt  
vivi 2800
Tom2500
John4500

 二、substr 截取字符串

        返回从起始位置起,指定长度之子字符串;若未指定长度,则返回从起始位置到字符串末尾的子字符串。
格式:
  substr(s,p) 返回字符串s中从p开始的后缀部分
  substr(s,p,n) 返回字符串s中从p开始长度为n的后缀部分
例子:

1
2
[root@test ~]# echo "123" | awk '{print substr($0,1,1)}'
1

解释:

awk -F ',' '{print substr($3,6)}'    --->  表示是从第3个字段里的第6个字符开始,一直到设定的分隔符","结束.
substr($3,10,8)  --->  表示是从第3个字段里的第10个字符开始,截取8个字符结束.
substr($3,6)     --->  表示是从第3个字段里的第6个字符开始,一直到结尾


三、length 字符串长度
   length函数返回没有参数的字符串的长度。length函数返回整个记录中的字符数。

1
2
[root@test ~]# echo "123" | awk '{print length}'
3

四、gsub函数

gsub函数则使得在所有正则表达式被匹配的时候都发生替换。gsub(regular expression, subsitution string, target string);简称 gsub(r,s,t)。

举例:把一个文件里面所有包含 abc 的行里面的 abc 替换成 def,然后输出第一列和第三列

1
awk '$0 ~ /abc/ {gsub("abc", "def", $0); print $1, $3}' abc.txt

五、正则表达式

字符 功能
+ 指定如果一个或多个字符或扩展正则表达式的具体值(在 +(加号)前)在这个字符串中,则字符串匹配。命令行:

awk '/smith+ern/' testfile

将包含字符 smit,后跟一个或多个 h 字符,并以字符 ern 结束的字符串的任何记录打印至标准输出。此示例中的输出是:

smithern, harry smithhern, anne

? 指定如果零个或一个字符或扩展正则表达式的具体值(在 ?(问号)之前)在字符串中,则字符串匹配。命令行:

awk '/smith?/' testfile

将包含字符 smit,后跟零个或一个 h 字符的实例的所有记录打印至标准输出。此示例中的输出是:

smith, alan smithern, harry smithhern, anne smitters, alexis

| 指定如果以 |(垂直线)隔开的字符串的任何一个在字符串中,则字符串匹配。命令行:

awk '/allen | alan /' testfile

将包含字符串 allen 或 alan 的所有记录打印至标准输出。此示例中的输出是:

smiley, allen smith, alan

( ) 在正则表达式中将字符串组合在一起。命令行:

awk '/a(ll)?(nn)?e/' testfile

将具有字符串 ae 或 alle 或 anne 或 allnne 的所有记录打印至标准输出。此示例中的输出是:

smiley, allen smithhern, anne

{m} 指定如果正好有 m 个模式的具体值位于字符串中,则字符串匹配。命令行:

awk '/l{2}/' testfile

打印至标准输出

smiley, allen

{m,} 指定如果至少 m 个模式的具体值在字符串中,则字符串匹配。命令行:

awk '/t{2,}/' testfile

打印至标准输出:

smitters, alexis

{m, n} 指定如果 m 和 n 之间(包含的 m 和 n)个模式的具体值在字符串中(其中m<= n),则字符串匹配。命令行:

awk '/er{1, 2}/' testfile

打印至标准输出:

smithern, harry smithern, anne smitters, alexis

[String] 指定正则表达式与方括号内 String 变量指定的任何字符匹配。命令行:

awk '/sm[a-h]/' testfile

将具有 sm 后跟以字母顺序从 a 到 h 排列的任何字符的所有记录打印至标准输出。此示例的输出是:

smawley, andy

[^ String] 在 [ ](方括号)和在指定字符串开头的 ^ (插入记号) 指明正则表达式与方括号内的任何字符不匹配。这样,命令行:

awk '/sm[^a-h]/' testfile

打印至标准输出:

smiley, allen smith, alan smithern, harry smithhern, anne smitters, alexis

~,!~ 表示指定变量与正则表达式匹配(代字号)或不匹配(代字号、感叹号)的条件语句。命令行:

awk '$1 ~ /n/' testfile

将第一个字段包含字符 n 的所有记录打印至标准输出。此示例中的输出是:

smithern, harry smithhern, anne

^ 指定字段或记录的开头。命令行:

awk '$2 ~ /^h/' testfile

将把字符 h 作为第二个字段的第一个字符的所有记录打印至标准输出。此示例中的输出是:

smithern, harry

$ 指定字段或记录的末尾。命令行:

awk '$2 ~ /y$/' testfile

将把字符 y 作为第二个字段的最后一个字符的所有记录打印至标准输出。此示例中的输出是:

smawley, andy smithern, harry

. (句号) 表示除了在空白末尾的终端换行字符以外的任何一个字符。命令行:

awk '/a..e/' testfile

将具有以两个字符隔开的字符 a 和 e 的所有记录打印至标准输出。此示例中的输出是:

smawley, andy smiley, allen smithhern, anne

*(星号) 表示零个或更多的任意字符。命令行:

awk '/a.*e/' testfile

将具有以零个或更多字符隔开的字符 a 和 e 的所有记录打印至标准输出。此示例中的输出是:

smawley, andy smiley, allen smithhern, anne smitters, alexis

\ (反斜杠) 转义字符。当位于在扩展正则表达式中具有特殊含义的任何字符之前时,转义字符除去该字符的任何特殊含义。例如,命令行:

/a\/\//

将与模式 a // 匹配,因为反斜杠否定斜杠作为正则表达式定界符的通常含义。要将反斜杠本身指定为字符,则使用双反斜杠。有关反斜杠及其使用的更多信息,请参阅以下关于转义序列的内容。

举例:把一个文件里面所有包含 abc 的行里面的 abc 替换成 def,然后输出第一列和第三列

1
awk '$0 ~ /abc/ {gsub("abc", "def", $0); print $1, $3}' abc.txt
分享到:
评论

相关推荐

    Linux AWK内置函数

    以上内容详细介绍了 Linux 下 AWK 的内置函数,包括算术函数和字符串函数。这些函数可以帮助开发者在进行文本处理时更加灵活高效。通过这些函数,我们可以轻松实现数据过滤、字符串操作等功能,从而提高工作效率。

    linux-shell脚本命令:awk命令简介

    awk内置函数还包括对字符串进行操作的功能,例如 substr、split、sub和gsub函数,分别用于获取子字符串、分割字符串到数组、字符串替换等。 使用awk时,模式匹配是一个非常重要的功能。模式可以是字符串或者正则...

    linux目录下的awk讲解

    awk还提供了许多内置的字符串函数,如`length(str)`返回字符串长度,`split(str, arr, fs)`根据分隔符fs将str分割成数组arr,`index(str1, str2)`返回str2在str1中的位置,`substr(str, pos[, len])`返回str从pos...

    linux下AWK学习笔记

    AWK提供了许多内置函数,如`length()`, `split()`, `substr()`, `index()`等,用于字符串处理和数学计算。同时,AWK支持关联数组,可以以任意字符串作为索引,方便处理复杂的数据结构。 ### 8. 表达式控制结构 AWK...

    linux ,awk ,awk详解

    此外,awk 还提供了许多内置函数,如 `length()`、`split()` 和 `substr()`,用于处理字符串和数组。 awk 的命令行使用允许用户在一行中直接编写简单的 awk 脚本,这对于快速处理文本非常方便。例如,`echo 'Hello,...

    AWK简易使用手册,linux

    同时,内置了许多函数,如`length()`计算字符串长度,`substr()`提取子字符串,`split()`分割字符串。 **7. BEGIN和END规则** `BEGIN`规则在处理任何记录之前执行,`END`规则在处理完所有记录后执行。它们常用于...

    awk教程-awk教程.rar

    - **函数**:awk提供了内置的数学和字符串处理函数,如length()、split()、substr()等。 - **自定义函数**:可以创建用户自定义函数来复用代码。 ### 5. 在Windows中使用AWK 虽然awk是Unix/Linux下的标准工具,但...

    awk笔记 算数函数、字符串函数

    在给定的文件信息中,我们探讨了AWK这一强大文本处理工具中的算数函数、字符串函数以及其他功能,包括时间函数。以下是对这些知识点的详细解释: ### 算数函数 1. **atan2(y,x)**:此函数计算坐标 (x,y) 的角度...

    AWK学习手册18年排版

    5. **函数**:掌握AWK的内置函数,如length()、split()和substr(),以及如何自定义函数。 6. **文件操作**:学习如何读取和写入文件,以及如何处理多文件输入。 7. **流程控制**:掌握if-else语句、for循环、while...

    awk tutorial and introduction 英文版

    awk还提供了一些内建函数,如`length()`(返回字符串长度)、`split()`(将字符串分割成数组)和`substr()`(提取子字符串)等。 **8. 表达式和模式匹配** awk支持正则表达式,可以在模式中使用,进行更复杂的数据...

    AWK Tutorial Guide

    AWK是一种强大的文本分析工具,尤其在Linux和Unix环境中广泛使用。它被设计用来处理结构化的数据,如CSV、TSV文件或者任何包含固定格式的数据流。AWK的名字来源于它的三位创始人——Alfred Aho、Peter Weinberger和...

    关于awk的用法总结

    awk提供了一系列内置函数,如length()计算字符串长度,split()将字符串分割成数组,substr()提取子字符串,还有其他如printf()、sprintf()等。 6. **变量与数组** awk中的变量默认为全局,无需声明即可使用。数组...

    AWK应用和讲解步骤

    - 常见的内置函数有 `length`, `substr`, `index`, `split` 等。 #### 数组 - 可以定义一维或二维数组。 - 使用下标访问数组元素。 #### 正则表达式 - AWK 支持简单的正则表达式,如 `^`, `$`, `.` 等。 - 用于...

    awk学习资料最近整理的资料

    6. **功能函数**:awk提供了丰富的内置函数,如`length()`计算字符串长度,`split()`分割字符串,`printf()`格式化输出,`substr()`提取子字符串等。 7. **条件操作**:awk中的条件控制结构包括`if`、`if-else`和`...

    sed&awk101 Hacks

    awk随机数生成器以及常用字符串函数包括index、length、split、substr等。特别是GAWK/NAWK的字符串函数,比如sub、gsub、match、以及变量RSTART和RLENGTH也被涵盖。 本手册是sed和awk学习者的宝贵资源,通过掌握...

    awk编程语言入门

    * 字符串函数:awk 中有多种字符串函数,如 sub、gsub、index、substr、split、length、match 等,用于对字符串进行操作。 * 数学函数:awk 中有多种数学函数,如 atan2、cos、exp、int、log、rand、sin、sqrt 等,...

    UNIX 下AWK编程起步教程

    - AWK内置了多个函数,如`length()`, `substr()`, `split()`等,可以用于字符串操作和数学计算。 - 用户也可以自定义函数来扩展功能。 8. **文件输入输出** - 可以通过`&lt;&gt;`操作符直接读写文件,或者使用`getline...

    linu awk命令详解_linuawk命令详解_

    - 内置函数如`length()`计算字符串长度,`split()`分割字符串,`substr()`获取子字符串等。 - 用户自定义函数可以增强awk的功能。 7. **示例** - 查找含有特定字符串的行:`awk '/pattern/' file` - 打印第一列...

    sed与awk精研

    5. **awk条件语句和函数**:awk内置了if-else语句和多种函数,如length()计算字符串长度,split()分割字符串,substr()获取子串等,使得处理复杂逻辑成为可能。 6. **sed与awk结合使用**:两者在文本处理上各有优势...

Global site tag (gtag.js) - Google Analytics