awk 指令结构格式

1、确保整个awk命令用单引号括起来
2、确保命令内所有引号成对出现
3、确保用花括号括起动作语句,用圆括号括起条件语句
4、确保动作语句打印的字符串及转义字符用双引号引起来。
----------------------------------------------------------------

awk条件操作符

操作符
   描述
操作符
  描述
<
小于
==
等于
<=
大于等于
!=
不等于
>
大于
~
匹配正则表达式
>=
大于等于
!~
不匹配正则表达式

awk条件逻辑操作符

操作符
 描述
&&
与运算
||
或运算

非运算

awk内置变量

内置变量名称
描述
内置变量名称
描述
ARGC
命令行参数个数
FS
设置输入域分隔符,等价命令行-F选项
ARGV
命令行参数排列
NF
记录浏览域的个数
ENVIRON
支持队列中系统环境变量的使用
NR
已读的记录数
FILENAME
awk浏览的文件名称
OFS
输出域分隔符
FNR
浏览文件的记录数
ORS
输出记录分割符
RS
    控制记录分隔符

awk中使用操作符,基本表达式可以划分为数字型,字符串型,变量型,域,数组元素
 
赋值操作符 = += *= /- %= ^=
条件表达操作符 ?
并、与、非 || && !
匹配操作符 ~ !~
关系操作符 < <= == != >>
算术操作符 + - * / % ^
前缀和后缀 ++ --

awk的常用内置字符串函数

gsub(r,s)
在整个$0中用s代替r(全局替换)
gsub(r,s,t)
在整个t中用s代替r (全局替换)
index(s,t)
返回s中字符串t的第一位置
length(s)
返回s长度
match(s,r)
测试s是否包含匹配r的字符串
split(s,a,fs)
在fs上将s分成序列a
sprint(fmt,exp)
返回经fmt格式化后的exp
sub(r,s)
用$0中最左边最长的字串代替s(只替换第一匹配的字符)
sub(s,p)
返回字符串s中从p开始的后缀部分 (只替换第一匹配的字符)
substr(s,p,n)
返回字符串s中从p开始长度为n的后缀部分 (只替换第一匹配的字符)

E.G
原例文:
[[email protected] ~]# cat wow

M.Tansley 05/99 48311 Green 8 40 44
J.Lulu 06/99 48317 green 9 24 26
P.Bunny 02/99 48 Yellow 12 35 28
J.Troll 07/99 4842 Brown-3 12 26 26
L.Tansley 05/99 4712 Brown-2 12 30 28
1)将整篇wow中的4全局替换成999

[[email protected] ~]# awk ‘gsub(/4/,999)‘ wow
M.Tansley 05/99 9998311 Green 8 9990 999999
J.Lulu 06/99 9998317 green 9 2999 26
P.Bunny 02/99 9998 Yellow 12 35 28
J.Troll 07/99 99989992 Brown-3 12 26 26
L.Tansley 05/99 999712 Brown-2 12 30 28

或者

[[email protected] ~]# awk ‘gsub(/4/,999,$0)‘ wow              //默认就是$0,可以不加
M.Tansley 05/99 9998311 Green 8 9990 999999
J.Lulu 06/99 9998317 green 9 2999 26
P.Bunny 02/99 9998 Yellow 12 35 28
J.Troll 07/99 99989992 Brown-3 12 26 26
L.Tansley 05/99 999712 Brown-2 12 30 28

2)将用户名为M.Tansley所在行所有4替换成999

[[email protected] ~]# awk ‘{if($1=="M.Tansley") gsub(/4/,999); print $0}‘ wow
M.Tansley 05/99 9998311 Green 8 9990 999999
J.Lulu 06/99 48317 green 9 24 26
P.Bunny 02/99 48 Yellow 12 35 28
J.Troll 07/99 4842 Brown-3 12 26 26
L.Tansley 05/99 4712 Brown-2 12 30 28
3)将用户名为M.Tansley所在行第三列的所有4替换成999

[[email protected] ~]# awk ‘{if($1=="M.Tansley") gsub(/4/,999,$3); print $0}‘ wow
M.Tansley     05/99     9998311     Green     8     40     44
J.Lulu 06/99 48317 green 9 24 26
P.Bunny 02/99 48 Yellow 12 35 28
J.Troll 07/99 4842 Brown-3 12 26 26
L.Tansley 05/99 4712 Brown-2 12 30 28
4)将用户名为M.Tansley所在行第三列的所有4替换成999,并且仅显示替换行

[[email protected] ~]# awk ‘{if($1=="M.Tansley") {gsub(/4/,999,$3); print $0}}‘ wow
M.Tansley 05/99 9998311 Green 8 40 44
5)将用户名为M.Tansley所在行第一个出现的4替换成999,

[[email protected] ~]# awk ‘{if($1=="M.Tansley") sub(/4/,999); print $0}‘ wow
M.Tansley 05/99 9998311 Green 8 40 44
J.Lulu 06/99 48317 green 9 24 26
P.Bunny 02/99 48 Yellow 12 35 28
J.Troll 07/99 4842 Brown-3 12 26 26
L.Tansley 05/99 4712 Brown-2 12 30 28
5)将用户名为M.Tansley所在行第一个出现的4替换成999 , 并且仅显示替换行

[[email protected] ~]# awk ‘{if($1=="M.Tansley") {sub(/4/,999); print $0}}‘ wow
M.Tansley 05/99 9998311 Green 8 40 44
6)查询字符串Bunny中ny是第几个出现的字符。

[[email protected] ~]# awk ‘BEGIN {print index("Bunny","ny")}‘ grade.txt 
4

7)查询字符串J.Troll的字符长度是多少?

[[email protected] ~]# awk ‘$1=="J.Troll" {print length($1),$1}‘ grade.txt 
7 J.Troll
8)分别测试字符串“ANCD”中是否包含字符 d 或 C 或 D,如果没包含返回字符0,如果包含返回时第几个出现的字符。

[[email protected] ~]# awk ‘BEGIN {print match("ANCD",/d/)}‘
0
[[email protected] ~]# awk ‘BEGIN {print match("ANCD",/C/)}‘
3
[[email protected] ~]# awk ‘BEGIN {print match("ANCD",/D/)}‘
4

9)显示字符串L.Tansley中从第1个字符(包含)开始的后面共5个字符

[[email protected] ~]# awk ‘$1=="L.Tansley" {print substr($1,1,5)}‘ grade.txt 
L.Tan

显示字符串L.Tansley中从第2个字符(包含)开始的后面共3个字符
[[email protected] ~]# awk ‘$1=="L.Tansley" {print substr($1,2,3)}‘ grade.txt
.Ta
10)用printf格式化awk的输出

[[email protected] ~]# awk ‘BEGIN{printf "%-60s\n","-------------------------------------------------------------"}{printf "%-15s %s %-15s %s %s\n",$1,"|",$3,"|",$5}‘ grade.txt 
-------------------------------------------------------------
M.Tansley       | 48311           | 8
J.Lulu          | 48317           | 9
P.Bunny         | 48              | 12
J.Troll         | 4842            | 12
L.Tansley       | 4712            | 12

[[email protected] ~]# awk ‘BEGIN{printf "%-39s\n","----------------------------------------";printf "%-15s %s %-15s %s %-1s %s\n","name","|","student_id","|","age","|";printf "%-52s\n","----------------------------------------"}{printf "%-15s %s %-15s %s %-3s %s\n",$1,"|",$3,"|",$5,"|"}END{printf "%-39s\n","----------------------------------------"}‘ grade.txt 
----------------------------------------
name            | student_id      | age |
----------------------------------------            
M.Tansley       | 48311           | 8   |
J.Lulu          | 48317           | 9   |
P.Bunny         | 48              | 12  |
J.Troll         | 4842            | 12  |
L.Tansley       | 4712            | 12  |
----------------------------------------
awk中使用的屏蔽序列
本文来源:http://www.benet.wang/shell%E7%BC%96%E7%A8%8B/61.html

时间: 2024-10-19 11:55:28

awk 指令结构格式的相关文章

第4章 awk编程

1 awk编程模型       2 awk用法 调用awk有三种方法(与sed类似): 在Shell命令行输入命令调用awk,格式为: awk [-F 域分隔符] 'awk程序段' 输入文件 将awk程序段插入脚本文件后,然后通过awk命令调用它: awk -f awk脚本文件输入文件 将awk命令插入脚本文件后,最常用的方法是设置该脚本文件为可执行,然后直接执行该脚本文件,格式为: ./awk脚本文件输入文件 注:第二种方法脚本文件的首行不以#!/bin/awk –f开头:第三种方法脚本文件的

shell文本过滤编程(五):awk之printf

[版权声明:转载请保留出处:blog.csdn.net/gentleliu.Mail:shallnew at 163 dot com] 在大多数情况下 awk 的 print 语句可以完成任务,但有时我们还需要更多.在那些情况下,awk 提供了两个我们熟知的函数 printf() 和 sprintf().是的,如同其它许多 awk 部件一样,这些函数等同于相应的 C 语言函数.printf() 会将格式化字符串打印到 stdout,而 sprintf()函数返回根据printf格式说明指定的格式

shell 正则表达三剑客--awk

awk命令 awk和sed一样是流式编辑器,它也是针对文档中的行来操作的,一行一行的去执行.awk比sed更加强大,它能做到sed能做到的.awk工具其实是很复杂的,有专门的书籍来介绍它的使用. 1 awk命令形式 awk [-F|-f|-v] 'BEGIN{} //{command1; command2} END{}' file [-F|-f|-v]   大参数,-F指定分隔符,-f调用脚本,-v定义变量 var=value '  '         引用代码块 BEGIN       初始化

报告生成器-awk命令

AWK是一个优良的文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一.这种编程及数据操作语言(其名称得自于它的创始人阿尔佛雷德·艾侯.彼得·温伯格和布莱恩·柯林汉姓氏的首个字母)的最大功能取决于一个人所拥有的知识.awk经过改进生成的新的版本nawk,gawk,现在默认linux系统下日常使用的是gawk,用命令可以查看正在应用的awk的来源(ls -l /bin/awk ) 格式: awk [options] 'script' file1 file2,... awk [

linux正则表达式awk讲解

awk和sed一样是流式编辑器,它也是针对文档中的行来操作的,一行一行的去执行.awk比sed更加强大,它能做到sed能做到的,同样也能做到sed不能做到的.awk常用来分段: awk不用加任何参数就可以实现 + ? * .  | 这些特殊符号: 1.截取文档中的某个段 [[email protected] ~]# head -n2 passwd |awk -F: '{print $1}' root bin [[email protected] ~]# head -n2 passwd |awk 

awk简单实用功能

awk实用功能: (来自网友Stephen Liu) 和sed一样,awk也是逐行扫描文件的,从第一行到最后一行,寻找匹配特定模板的行,并在这些行上运行"选择"动作.如果一个模板没有指定动作,这些匹配的行就被显示在屏幕上.如果一个动作没有模板,所有被动作指定的行都被处理. awk的基本格式:/> awk 'pattern' filename/> awk '{action}' filename /> awk 'pattern {action}' filename [[e

awk 用法(自己笔记)

Table of Contents 1. awk简介 2. awk命令格式和选项 2.1. awk的语法有两种形式 2.2. 命令选项 3. 模式和操作 3.1. 模式 3.2. 操作 4. awk的环境变量 5. awk运算符 6. 记录和域 6.1. 记录 6.2. 域 6.3. 域分隔符 7. gawk专用正则表达式元字符 8. POSIX字符集 9. 匹配操作符(~) 10. 比较表达式 11. 范围模板 12. 一个验证passwd文件有效性的例子 13. 几个实例 14. awk编程

sed及awk命令的使用

sed命令 sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.接着处理下一行,这样不断重复,直到文件末尾.文件内容并没有 改变,除非你使用重定向存储输出.Sed主要用来自动编辑一个或多个文件:简化对文件的反复操作:编写转换程序等. 命令格式 sed [options] 'comman

Linux下使用awk批量删除共享内存

1.awk简介 awk 是一个强大的文本分析工具.sed 常常用于一整个行的处理,而 awk 则倾向于以空格和tab键为默认分隔符将每行切片成一个个域(也就是一列)来处理.awk适用于小型的数据处理. awk有3个不同版本: awk.nawk和gawk,未作特别说明,一般指gawk,gawk 是 awk 的 GNU 版本. 2. awk语法格式 awk 'pattern1{action1} pattern2{action2} -' filename awk 后面接两个单引号并加上大括号 {} 来