linux shell awk命令

合集下载

shell中awk的用法

shell中awk的用法

shell中awk的用法在shell中,awk是非常常用的文本处理工具,它可以用来对文本进行格式化、过滤、统计等操作。

下面介绍一些常用的awk命令: 1. 基本语法awk 'pattern {action}' filename其中,pattern是匹配规则,action是对匹配到的行进行的操作,filename是要处理的文件名。

2. 打印整行awk '{print}' filename上面的命令会将文件中的每一行都打印出来。

3. 按列打印awk '{print $1,$2}' filename上面的命令会将文件中每一行的第一列和第二列打印出来。

4. 过滤行awk '/pattern/{print}' filename上面的命令会将文件中匹配到pattern的行打印出来。

5. 过滤列awk '{print $1,$3}' filename上面的命令会将文件中每一行的第一列和第三列打印出来。

6. 计算行数awk 'END{print NR}' filename上面的命令会统计文件中的行数并打印出来。

7. 计算列数awk '{print NF}' filename上面的命令会统计文件中每一行的列数并打印出来。

8. 求和awk '{sum+=$1} END{print sum}' filename上面的命令会将文件中第一列的数值求和并打印出来。

9. 求平均值awk '{sum+=$1} END{print sum/NR}' filename 上面的命令会将文件中第一列的数值求平均值并打印出来。

以上是一些常用的awk命令,可以根据需求进行灵活应用。

awk调用shell命令

awk调用shell命令

awk调用shell命令在awk内部可利用管道和getline函数来调用shell命令,并可得到返回的具体结果,进行相应处理。

例子如下:1) {while ( ("ls" | getline) >0 )print}输出当前目录下的所有文件,并打印到标准输出上。

| 是管道,getline依次得到每一行的输出,赋值给$0,print打印到标准输出上2) 如果希望将输出赋值到另外一个变量中,而不是覆盖$0,可这样改写:{while ( ("ls" | getline name) >0 )print name}3) system命令可以把awk内部的变量传递到外面使用,比如:{system("echo ", $1)}打印$1的内容getline为awk所提供的输入指令.其语法如下 :语法由何处读取数据数据读入后置于getline var < file 所指定的 file 变量 var(var省略时,表示置于$0)getline var pipe 变量变量 var(var省略时,表示置于$0)getline 一次读取一行数据, 若读取成功则return 1, 若读取失败则return -1, 若遇到文件结束(EOF), 则return 0;本程序使用 getline 所 return 的数据来做为 while 判断循环停止的条件,某些awk版本较旧,并不容许使用者改变$0 之值. 这种版的awk 执行本程序时会产生 Error, 读者可于 getline 之后置上一个变量(如此, getline 读进来的数据便不会被置于 $0 ), 或直接改用gawk便可解决.awk 提供与 UNIX 用法近似的 pipe, 其记号亦为 "|". 其用法及含意如下 :awk程序中可接受下列两种语法:[a. 语法] awk output 指令 | "Shell 接受的命令"( 如 : print $1,$2 | "sort -k 1" )[b. 语法] "Shell 接受的命令" | awk input 指令( 如 : "ls " | getline)注 : awk input 指令只有 getline 一个.awk output 指令有 print, printf() 二个.在a 语法中, awk所输出的数据将转送往 Shell , 由 Shell 的命令进行处理.以上例而言, print 所输出的数据将经由 Shell 命令 "sort -k 1" 排序后再送往屏幕(stdout).上列awk程序中, "print$1, $2" 可能反复执行很多次, 其输出的结果将先暂存于 pipe 中,等到该程序结束时, 才会一并进行 "sort -k 1".须注意二点 : 不论 print $1, $2 被执行几次, "sort -k 1" 的执行时间是 "awk程序结束时", "sort -k 1" 的执行次数是 "一次".在 b 语法中, awk将先调用 Shell 命令. 其执行结果将通过 pipe 送入awk程序,以上例而言, awk先让 Shell 执行"ls",Shell 执行后将结果存于 pipe, awk指令 getline再从 pipe 中读取数据.使用本语法时应留心: 以上例而言,awk "立刻"调用Shell 来执行"ls", 执行次数是一次.getline 则可能执行多次(若pipe中存在多行数据).除上列a, b 二中语法外, awk程序中其它地方如出现像"date", "cls", "ls"... 这样的字符串, awk只把它当成一般字符串处理。

Shell脚本及linux命令学习

Shell脚本及linux命令学习

Shell脚本及linux命令学习∙echo "内容" |mail -s "标题" "收件人"mail [邮箱] <<EOF;OOXX(内容)EOF #结束符∙在屏幕直接按照制定格式输出cat << EOFooxx(内容)EOF∙AWK介绍:{}内视为一个原子操作,以“;”分隔命令,顺序进行∙hostname 命令:显示主机名;hostname -s 显示主机名(不完整)-i IP地址* whoami 显示当前用户名∙pstree work 查看当前进程及线程数∙rz,sz:用SecurtCRT时,linux与客户端间传文件∙echo $PATH:查看自己有权限的bin目录∙du -s,-sm,-sk:查看文件夹大小∙sar:linux性能检测工具∙awk的OFS:echo a b c d | awk 'BEGIN {OFS=":"} {print $1, $2, $3, $5}'a:b:c:d (替换分隔符)∙tar xfj (.bz2) tar czvf(打包)xzvf(解包)(.tar.gz)(.tgz)∙xxd命令:查看二进制文件∙teeprot.pl:截包、转发、中转工具-l -r -f∙seekone:∙wget -r -nd(不下载目录结构)--limit-rate==2M ftp://tc...//home/...∙time:计算执行时间∙uname 显示当前操作系统名称∙file:辨识文件类型∙ldd:用来查看程序运行所需的共享库,常用来解决程序因缺少某个库文件而不能运行的一些问题∙set:不带任何参数的set命令将显示shell的全部变量。

∙export:设置环境变量∙unset:清楚环境变量∙mkdir -p:创建上层目录,如mkdir -p /home/work/lixiaowen/123/456∙vi中段注释:开头行添加<<BLOCK,结尾行BLOCK∙vi中打开多个文件:在vi中输出sp ,vi -o ...∙Linux的五个查找命令:find,locate,whereis,which,type 网上找的说明∙sudo:限制版本的su。

shell中awk命令的if条件语句引入外置变量

shell中awk命令的if条件语句引入外置变量
shell的awk命令常常用于筛选文本的某列数据其中筛选文本时应该用text而引入外部变量时应该为variable
shell中 awk命令的 条件语句引入外置变量
shell脚本中常常用到awk的按列筛选功能,但是外部变量不能直接在awk中引用。正确引入方式是 '"$a"' 即外部是一个单引号,内部是一个 双引号。 awk中的IF语句需要注意以下几点: 对于数字文本可以使用 == >= <= != 代表等于大于小于不等于 对于文字文本可以使用 ~/text/ 代表含有 对于逻辑性文本 && || ! 代表且或非 对于内置变量,变量前不需要加 $ 符号,只需要字母即可 对于外置变量,变量前不仅要加$还需要引号括起来 '"${variable}"' 实例

11.2.3 Shell编程-字符截取命令-awk命令

11.2.3 Shell编程-字符截取命令-awk命令

BEGIN
# awk 'BEGIN{printf "This is a transcript \n" } {printf $2 "\t" $6 "\n"}' student.txt
END
# awk 'END{printf "The End \n" } {printf $2 "\t" $6 "\n"}' student.txt
第十一讲 Shell编程
主讲人:沈超(/lampsc) 交流论坛:
课程大纲
11.1 11.2 11.3 11.4 11.5 基础正则表达式 字符截取命令 字符处理命令 条件判断 流程控制
11.2.1 11.2.2 11.2.3 11.2.4
FS内置变量
# cat /etc/passwd | grep "/bin/bash" | \ awk 'BEGIN {FS=":"} {printf $1 "\t" $3 "\n"}'
关系运算符
# cat student.txt | grep -v Name | \ awk '$6 >= 87 {printf $2 "\n" }'
cut字段提取命令 printf命令 awk命令 sed命令
# awk ‘条件1{动作1} 条件2{动作2}…’ 文件名
条件(Pattern): 一般使用关系表达式作为条件 x > 10 判断变量 x是否大于10 x>=10 大于等于 x<=10 小于等于 动作(Action): 格式化输出 流程控制语句

shell科学计数法转换

shell科学计数法转换

shell科学计数法转换Shell脚本是一种运行于Unix/Linux操作系统下的命令解释器。

在Shell编程中,科学计数法是一种常见的数值表示方式。

它使用'e'或'E'来表示指数部分,比如1.23e-4就表示1.23乘以10的负4次方。

在实际应用中,有时需要将科学计数法转换为常规的数字形式,或者将常规的数字形式转换为科学计数法。

本文将介绍如何使用Shell脚本实现科学计数法的转换。

首先,将科学计数法转换为常规的数字形式,可以使用bc命令来实现。

bc是一种计算器程序,可以处理任意精度的数值计算。

假设需要将1.23e-4转换为常规形式,可以使用如下命令:echo '1.23e-4' | bc输出结果为:.000123可以看到,bc命令将科学计数法转换为了常规的数字形式。

其中,'.'表示小数点,'000123'表示数字部分。

接着,将常规的数字形式转换为科学计数法,可以使用awk命令来实现。

awk是一种文本处理工具,支持对文本进行格式化和计算。

假设需要将0.000123转换为科学计数法,可以使用如下命令:echo '0.000123' | awk '{printf '%.2e', $1}'输出结果为:1.23e-04可以看到,awk命令将常规的数字形式转换为了科学计数法。

其中,'%.2e'表示输出为科学计数法,'.2'表示保留两位小数。

综上所述,使用Shell脚本可以实现科学计数法的转换。

在实际应用中,可以根据具体需求选择合适的命令来实现转换。

shell中awk多变量赋值

shell中awk多变量赋值

shell中awk多变量赋值场景描述:shell脚本中有下⾯三个赋值语句:a=`echo "1.0.0.0 1.0.0.255 海外海外" | awk '{print $1}'`b=`echo "1.0.0.0 1.0.0.255 海外海外" | awk '{print $2}'`c=`echo "1.0.0.0 1.0.0.255 海外海外" | awk '{print $3}'`echo a=$a b=$b c=$c怎样⽤⼀句话可以给a、b、c赋值呢?⽅法:echo "1.0.0.0 1.0.0.255 海外海外" | awk '{print $1,$2,$3}' | while read a b cdoecho a=$a b=$b c=$cdone最终脚本中实现:while read a b c ddoecho a=$a b=$b c=$cdone < ./IP.data这是因为IP.data每⾏只有四个字段,需要前三个,那么可以这么使⽤。

其实依然是⽤while read的⽅法在linux命令⾏模式下,可以这么实现:read a b c < <(echo "1.0.0.0 1.0.0.255 海外海外" | awk '{print $1,$2,$3}')echo a=$a b=$b c=$c疑问:1、如果将上⾯的语句放在shell脚本中,执⾏报错:[admin@inc-dw-151-5 backup]$ cat a.sh#!/bin/shread a b c < <(echo "1.0.0.0 1.0.0.255 海外海外" | awk '{print $1,$2,$3}')[admin@inc-dw-151-5 backup]$ chmod +x a.sh; ./a.sh; rm ./a.sh./a.sh: line 2: syntax error near unexpected token `<'./a.sh: line 2: `read a b c < <(echo "1.0.0.0 1.0.0.255 海外海外" | awk '{print $1,$2,$3}')'2、如果将语句在linux下稍作修改,执⾏报错:[admin@inc-dw-151-5 backup]$ read a b c < (echo "1.0.0.0 1.0.0.255 海外海外" | awk '{print $1,$2,$3}')-bash: syntax error near unexpected token `('[admin@inc-dw-151-5 backup]$ read a b c < < (echo "1.0.0.0 1.0.0.255 海外海外" | awk '{print $1,$2,$3}')-bash: syntax error near unexpected token `<'[admin@inc-dw-151-5 backup]$ read a b c < m<(echo "1.0.0.0 1.0.0.255 海外海外" | awk '{print $1,$2,$3}')-bash: m/dev/fd/62: 没有那个⽂件或⽬录想先把数据放到m这个⽂件⾥⾯,结果被直接定向到了m/dev/fd/62,那么 < <应该是使⽤了特殊的⽂件描述符,但还没找到说明⽂档问了⼏个SA,都解释不了,如有⾼⼈,盼能解惑,very thanks!。

在Linux中使用awk命令进行文本处理和数据提取

在Linux中使用awk命令进行文本处理和数据提取

在Linux中使用awk命令进行文本处理和数据提取在Linux系统中,awk是一种功能强大的文本处理工具,可用于从文件或输入流中提取和处理数据。

它提供了一种简单而有效的方式来搜索、过滤、处理和格式化文本数据。

本文将详细介绍如何在Linux中使用awk命令进行文本处理和数据提取。

一、awk命令的基本语法和工作原理awk命令的基本语法为:```shellawk 'pattern { action }' file```其中,pattern指定了一个模式,用于匹配输入数据的特定行;action指定了要执行的操作,用于处理匹配到的行。

file是输入文件的名称。

awk命令的工作原理如下:1. 从输入文件或输入流中逐行读取数据。

2. 对每一行数据,按照pattern进行模式匹配。

3. 如果匹配成功,则执行action。

4. 重复步骤2和步骤3,直到处理完所有的数据。

二、使用awk命令进行文本处理1. 文本分割awk可以根据指定的分隔符对文本进行分割。

以下是一个例子,假设有一个文本文件people.txt,内容如下:```shellJohn,Smith,25,MaleAlice,Johnson,30,Female```现在我们想要只输出每行的第一个字段(名字),可以使用以下命令:```shellawk -F ',' '{ print $1 }' people.txt```输出结果为:```JohnAlice```2. 文本过滤awk可以根据指定的条件对文本进行过滤。

以下是一个例子,假设有一个文本文件grades.txt,内容如下:```shellJohn,85Alice,95Tom,78Emma,92```现在我们想要只输出分数大于90的学生,可以使用以下命令:```shellawk -F ',' '$2 > 90 { print $1 }' grades.txt```输出结果为:```AliceEmma```3. 数值计算awk也支持对文本中的数值进行计算。

一天一个shell命令linux文本内容操作系列-awk命令详解

一天一个shell命令linux文本内容操作系列-awk命令详解

⼀天⼀个shell命令linux⽂本内容操作系列-awk命令详解简介awk是⼀个强⼤的⽂本分析⼯具,相对于grep的查找,sed的编辑,awk在其对数据分析并⽣成报告时,显得尤为强⼤。

简单来说awk就是把⽂件逐⾏的读⼊,以空格为默认分隔符将每⾏切⽚,切开的部分再进⾏各种分析处理。

awk有3个不同版本: awk、nawk和gawk,未作特别说明,⼀般指gawk,gawk 是 AWK 的 GNU 版本。

awk其名称得⾃于它的创始⼈ Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓⽒的⾸个字母。

实际上 AWK 的确拥有⾃⼰的语⾔: AWK 程序设计语⾔,三位创建者已将它正式定义为“样式扫描和处理语⾔”。

它允许您创建简短的程序,这些程序读取输⼊⽂件、为数据排序、处理数据、对输⼊执⾏计算以及⽣成报表,还有⽆数其他的功能。

使⽤⽅法awk '{pattern + action}' {filenames}尽管操作可能会很复杂,但语法总是这样,其中 pattern 表⽰ AWK 在数据中查找的内容,⽽ action 是在找到匹配内容时所执⾏的⼀系列命令。

花括号({})不需要在程序中始终出现,但它们⽤于根据特定的模式对⼀系列指令进⾏分组。

pattern就是要表⽰的正则表达式,⽤斜杠括起来。

awk语⾔的最基本功能是在⽂件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进⾏其他⽂本操作。

完整的awk脚本通常⽤来格式化⽂本⽂件中的信息。

通常,awk是以⽂件的⼀⾏为处理单位的。

awk每接收⽂件的⼀⾏,然后执⾏相应的命令,来处理⽂本。

调⽤awk有三种⽅式调⽤awk说明:awk被设计⽤于数据流,能够对列和⾏进⾏操作。

⽽sed更多的是匹配,进⾏替换和删除。

awk有很多内建的功能,⽐如数组,函数等。

灵活性是awk的最⼤优势。

awk的结构awk 'BEGIN{ print "start"}pattern { commands }END{ print "end"}'file为了偏于观看,我打了回车,实际上是⼀⾏⼀个awk脚本通常是3部分1. BEGIN语句块2. 能够使⽤模式匹配的通⽤语句块3. END语句块他们任何⼀部分都可以不出现在脚本中。

Linux命令高级技巧使用findgrepsedxargs和awk命令进行高级文件搜索和批量处理

Linux命令高级技巧使用findgrepsedxargs和awk命令进行高级文件搜索和批量处理

Linux命令高级技巧使用findgrepsedxargs 和awk命令进行高级文件搜索和批量处理Linux命令高级技巧:使用find、grep、sed、xargs和awk命令进行高级文件搜索和批量处理Linux是一种常用的操作系统,广泛应用于服务器和嵌入式设备。

作为开源操作系统,Linux提供了强大的命令行工具,这些工具可以通过各种命令和参数来完成各种任务。

本文将介绍Linux中几个常用的命令:find、grep、sed、xargs和awk,并讲解如何使用它们来进行高级文件搜索和批量处理。

一、find命令find命令用于在指定目录中搜索文件和目录。

它可以根据文件名、文件类型、文件大小、文件时间等多个条件进行搜索。

以下是find命令的基本语法:find [路径] [条件]其中,路径表示搜索的起始目录,条件表示搜索的条件。

下面是一些常见的find命令使用示例:1. 在当前目录下搜索以.txt结尾的文件:$ find . -name "*.txt"该命令会从当前目录开始搜索,找到以.txt结尾的文件并打印出它们的路径。

2. 在指定目录及其子目录下搜索大于100MB的文件:$ find /path/to/dir -size +100M该命令会在指定目录及其子目录中搜索大于100MB的文件并打印出它们的路径。

3. 在系统根目录下搜索所有的空文件:$ find / -type f -empty该命令会在系统根目录下搜索所有的空文件并打印出它们的路径。

二、grep命令grep命令用于在文件中搜索指定的模式。

它可以根据正则表达式匹配模式,并打印出包含该模式的行。

以下是grep命令的基本语法:grep [选项] 模式 [文件]其中,选项表示grep命令的参数,模式表示要搜索的模式,文件表示要搜索的文件。

下面是一些常见的grep命令使用示例:1. 在文件中搜索包含指定关键字的行:$ grep "keyword" file.txt该命令会在file.txt文件中搜索包含关键字"keyword"的行并打印出它们。

Linux Shell中awk命令的用法

Linux Shell中awk命令的用法

Linux Shell中awk命令的用法awk命令awk也是一个数据处理工具!相较于 sed 常常作用于一整个行的处理, awk 则比较倾向于一行当中分成数个字段来处理。

.awk语言的最基本功能是在文件或字符串中基于指定规则来分解抽取信息,也可以基于指定的规则来输出数据。

有三种方式调用awk1.命令行方式awk [-F field-separator] 'commands' input-files其中,[-F域分隔符]是可选的,因为awk使用空格或tab键作为缺省的域分隔符,因此如果要浏览域间有空格的文本,不必指定这个选项,如果要浏览诸如passwd文件,此文件各域以冒号作为分隔符,则必须指明-F选项,如:awk -F: 'commands' input-file。

注:在linux系统中用环境变量IFS存储分隔符,但根据实际应用也可以改变IFS的值.例如:脚本执行结果如下:commands 是真正awk命令, input-files 是待处理的文件。

iput_files可以是多于一个文件的文件列表,awk将按顺序处理列表中的每个文件。

在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。

通常,在不指名-F域分隔符的情况下,默认的域分隔符是空格或tab键。

2.shell脚本方式将所有的awk命令插入一个文件,并使awk程序可执行,然后awk命令解释器作为脚本的首行,以便通过键入脚本名称来调用。

相当于shell脚本首行的:#!/bin/sh可以换成:#!/bin/awk3.将所有的awk命令插入一个单独文件,然后调用:Awk -f awk-script-file input-files其中,-f选项加载awk-script-file中的awk脚本,input-files跟上面的是一样的。

awk的模式和动作任何awk语句都由模式和动作组成(awk_pattern { actions })。

Linux系统网络配置管理Shell脚本

Linux系统网络配置管理Shell脚本

Linux系统网络配置管理Shell脚本随着互联网的普及和应用的广泛,Linux操作系统成为了服务器领域的主力。

在Linux服务器的管理中,对网络配置的管理显得尤为重要。

本文将介绍Linux系统网络配置管理的Shell脚本,帮助系统管理员提高工作效率和操作的准确性。

一、脚本功能介绍网络配置管理是Linux服务器管理的核心之一,脚本的设计应具备以下功能:1. 自动获取IP地址和子网掩码;2. 自动设置网关和DNS服务器;3. 支持静态IP和动态IP切换;4. 支持网络接口的启用和禁用。

二、脚本编写#!/bin/sh#获取当前网络配置信息IP=$(ifconfig eth0 | awk '/inet addr/{split($2,x,":");print x[2]}')SubnetMask=$(ifconfig eth0 | awk '/inet addr/{split($4,x,":");print x[2]}') Gateway=$(route -n | awk '/UG/{print $2}')DNS=$(cat /etc/resolv.conf | awk '/nameserver/{print $2}')#显示当前网络配置信息echo "当前IP地址为:$IP"echo "当前子网掩码为:$SubnetMask" echo "当前网关为:$Gateway"echo "当前DNS服务器为:$DNS"#选择网络配置模式echo "请选择网络配置模式:"echo "1. 动态IP"echo "2. 静态IP"read mode#根据选择的网络配置模式执行对应操作case $mode in1)#动态IP配置dhclient eth0echo "动态IP配置成功!";;2)#静态IP配置echo "请输入静态IP地址:"read staticIPecho "请输入子网掩码:"read staticSubnetMaskecho "请输入网关地址:"read staticGatewayecho "请输入DNS服务器地址:"read staticDNS#配置静态IP地址ifconfig eth0 $staticIP netmask $staticSubnetMask route add default gw $staticGatewayecho "nameserver $staticDNS" > /etc/resolv.conf echo "静态IP配置成功!";;*)echo "输入有误,请重新运行脚本!";;esac#显示配置结果echo "网络配置已更新!"echo "当前IP地址为:$(ifconfig eth0 | awk '/inetaddr/{split($2,x,":");print x[2]}')"echo "当前子网掩码为:$(ifconfig eth0 | awk '/inetaddr/{split($4,x,":");print x[2]}')"echo "当前网关为:$(route -n | awk '/UG/{print $2}')"echo "当前DNS服务器为:$(cat /etc/resolv.conf | awk'/nameserver/{print $2}')"三、脚本解析1. 首先通过ifconfig命令获取当前网络配置信息,其中eth0是网卡名称。

shell查看文件内容的命令

shell查看文件内容的命令

shell查看文件内容的命令
在Linux系统中,shell是一种强大的命令行解释器,可以用来执行各种任务,包括查看文件内容。

下面是一些常用的shell命令,可以帮助你查看文件内容:
1. cat命令:cat命令是一种用于连接文件并输出到标准输出的工具。

可以将一个或多个文件的内容输出到屏幕,例如:
```
cat file1.txt file2.txt
```
2. less命令:less命令是一种文件查看器,它可以按页浏览文件内容。

可以使用less命令查看长文件,例如:
```
less longfile.txt
```
3. head命令:head命令是一种用于显示文件头部的工具。

默认情况下,它会显示文件的前10行。

例如:
```
head file.txt
```
4. tail命令:tail命令是一种用于显示文件尾部的工具。

默认情况下,它会显示文件的后10行。

例如:
```
tail file.txt
```
5. grep命令:grep命令是一种用于在文件中搜索指定模式的工具。

可以使用grep命令查找包含指定关键字的行,例如:
```
grep keyword file.txt
```
6. awk命令:awk命令是一种文本处理工具,可以用于提取和处理文本数据。

可以使用awk命令查找并提取指定模式的数据,例如: ```
awk '/pattern/ {print}' file.txt
```
以上这些命令在Linux系统中都是非常常用的,可以帮助你快速查看文件内容并处理数据。

linux中shell,awk,sed截取字符串方法总结

linux中shell,awk,sed截取字符串方法总结

linux中shell,awk,sed截取字符串⽅法总结Shell第⼀种:${parameter%word} 最⼩限度从后⾯截掉word${parameter%%word} 最⼤限度从后⾯截掉word${parameter#word} 最⼩限度从前⾯截掉word${parameter##word} 最⼤限度从前⾯截掉wordword可以是⼀个具体的字符串,也可以是⼀个模式字符串。

例⼦:str='http://www.你的域名.com/cut-string.html'echo ${str%%/*}结果:http:echo ${str#*//}结果:www.你的域名.com/cut-string.htmlecho ${str##*/}结果:cut-string.html第⼆种:${variable:n1:n2}:截取变量variable从左边起索引n1开始的n2个字符。

n1表⽰索引,索引从0开始;n2表⽰截取的字符个数。

变种如下:${variable:n1}:截取变量variable从左边起索引n1开始的所有字符。

${variable:0-n1:n2}:截取变量variable从右边起第n1个字符开始的n2个字符。

${variable:0-n1:n2}:截取变量variable从右边起第n1个字符开始的所有字符。

例⼦:variable='http://www.你的域名.com/cut-string.html'echo ${variable:0:4}结果:httpecho ${variable:7}结果:www.你的域名.com/cut-string.htmlecho ${variable:0-15:10}结果:cut-stringecho ${variable:0-15}结果:cut-string.html第三种:借助其他shell命令,如cutcut命令的选项主要有以下⼏个:echo $variable | cut -c1-4结果:httpecho $variable | cut -c8-结果:www.你的域名.com/cut-string.htmlecho $variable | cut -d":" -f1结果:http。

linux下awk命令使用详解(实例)

linux下awk命令使用详解(实例)

linux下awk命令使用详解(实例)linux下awk命令使用详解(实例)分类: shell编程开发 2012-04-27 18:15 112人阅读评论(0) 收藏举报最近在搞linux系统脚本文件时,遇到了AWK以前培训的时候没有注意还有这样的命令,这里学习并整理了下!一、awk命令行模式:第一种,命令行方式,如:awk [-Ffield-separator] 'commands' input-file(s)这里commands是真正的awk命令,[-F域分隔符]是可选的,awk 默认使用空格分隔,因此如果要浏览域间有空格的文本,不必指定这个选项,但如果浏览如passwd文件,此文件各域使用冒号作为分隔符,则必须使用-F选项:awk -F : 'commands' input-file第二种,将所有awk命令插入一个文件,然后用awk命令解释器作为脚本的首行,以便通过键入脚本名称来调用它。

第三种,将所有awk命令插入一个单独文件,然后调用:awk -f awk-script-file input-file-f选项指明在文件awk-script-file的awk脚本,input-file是使用awk进行浏览的文件名awk脚本:awk脚本由各种操作和模式组成,根据分隔符(-F选项),默认为空格,读取的内容依次放置到对应的域中,一行一行记录读取,直到文件尾模式和动作:任何awk语句都是由模式和动作组成,在一个awk脚本中可能有许多语句。

模式部分决定动作语句何时触发及触发事件。

动作即对数据进行的操作,如果省去模式部分,动作将时刻保持执行状态模式可以是任何条件语句或复合语句或正则表达式,模式包含两个特殊字段BEGIN和END,使用BEGIN语句设置计数和打印头,BEGIN语句使用在任何文本浏览动作之前,之后文本浏览动作依据输入文件开始执行;END语句用来在awk 完成文本浏览动作后打印输出文本总数和结尾状态标志,有动作必须使用{}括起来实际动作在大括号{}内指明,常用来做打印动作,但是还有更长的代码如if和循环looping语句及循环退出等,如果不指明采取什么动作,awk默认打印出所有浏览出的记录域和记录:awk执行时,其浏览标记为$1,$2...$n,这种方法称为域标记.使用$1,$3表示参照第1和第3域,注意这里使用逗号分隔域,使用$0表示使用所有域例:awk'{print $0}' temp.txt >sav.txt 表示打印所有域并把结果重定向到sav.txt中awk '{print $0}' temp.txt|tee sav.txt 和上例相似,不同的是将在屏幕上显示出来awk '{print $1,$4}'temp.txt 只打印出第1和第4域awk 'BEGIN {print "NAME GRADE\n-------------"} {print $1"\t"$4}'temp.txt表示打信息头,即输入的内容的第一行前加上"NAMEGRADE\n-------------",同时内容以tab分开awk 'BEGIN {print "being"} {print $1} END {print "end"}' temp 同时打印信息头和信息尾条件操作符:<、<=、==、!=、>=、~匹配正则表达式、!~不匹配正则表达式匹配:awk'{if ($4~/ASIMA/) print $0}' temp 表示如果第四个域包含ASIMA,就打印整条awk '$0 ~ /ASIMA/' temp 表示只要整条包含ASIMA就打印出来精确匹配:awk'$3=="48" {print $0}'temp 只打印第3域等于"48"的记录不匹配:awk '$0 !~ /ASIMA/'temp 打印整条不包含ASIMA的记录不等于:awk '$1 != "asima"' temp小于:awk '{if ($1<$2) print $1 "is smaller"}'temp设置大小写:awk '/[Gg]reen/'temp 打印整条包含Green,或者green的记录任意字符:awk '$1 ~/^...a/'temp 打印第1域中第四个字符是a的记录,^行首,.任意字符或关系匹配:awk '$0~/(abc)|(efg)/' temp 使用|时,语句需要括起来AND与关系:awk '{if ( $1=="a" && $2=="b" )print $0}' tempOR或关系:awk '{if ($1=="a" || $1=="b") print $0}' temp二、awk内置变量:ARGC 命令行参数个数AGRV 命令行参数排列ENVIRON 支持队列中系统环境变量的使用FILENAME awk浏览的文件名FNR 浏览文件的记录数FS 设置输入域分隔符,同- F选项NF 浏览记录的域个数NR 已读的记录数OFS 输出域分隔符ORS 输出记录分隔符RS 控制记录分隔符例:awk 'END {print NR}'temp 在最后打印已读记录条数awk '{print NF,NR,$0} END {print FILENAME}' tempawk '{if (NR>0 &&$4~/Brown/) print $0}' temp 至少存在一条记录且包含BrownNF的另一用法:echo $PWD | awk -F/ '{print$NF}' 显示当前目录名awk操作符:在awk中使用操作符,基本表达式可以划分成数字型、字符串型、变量型、域及数组元素设置输入域到变量名:awk'{name=$1;six=$3; if (six=="man") print name " is " six}'temp域值比较操作:awk 'BEGIN{BASE="27"} {if ($4<BASE) print $0}' temp修改数值域取值:(原输入文件不会被改变)awk '{if ($1=="asima")$6=$6-1;print $1,$6,$7}' temp修改文本域:awk '{if ($1=="asima) ($1=="desc");print $1}' temp只显示修改记录:(只显示所需要的,区别上一条命令,注意{})awk '{if ($1=="asima) {$1=="desc";print$1}}'temp创建新的输出域:awk '{$4=$3-$2; print $4}' temp统计列值:awk '(tot+=$3);END {print tot}'temp 会显示每列的内容awk '{(tot+=$3)};END {printtot}'temp 只显示最后的结果文件长度相加:ls -l|awk '/^[^d]/ {print$9"\t"$5} {tot+=$5} END{print "totKB:" tot}'只列出文件名:ls -l|awk'{print$9}' 常规情况文件名是第9域awk内置字符串函数:gsub(r,s)在整个$0中用s替代rawk'gsub(/name/,"xingming") {print $0}' tempgsub(r,s,t)在整个t中用s替代rindex(s,t)返回s中字符串t的第一位置awk 'BEGIN{print index("Sunny","ny")}'temp 返回4length(s)返回s的长度match(s,r)测试s是否包含匹配r的字符串awk'$1=="J.Lulu" {print match($1,"u")}'temp 返回4split(s,a,fs)在fs上将s分成序列aawk 'BEGIN{print split("12#345#6789",myarray,"#")"'返回3,同时myarray[1]="12", myarray[2]="345",myarray[3]="6789"sprint(fmt,exp)返回经fmt格式化后的expsub(r,s)从$0中最左边最长的子串中用s代替r(只更换第一遇到的匹配字符串)substr(s,p)返回字符串s中从p开始的后缀部分substr(s,p,n)返回字符串s中从p开始长度为n的后缀部分printf函数的使用:字符转换:echo "65" |awk '{printf"%c\n",$0}' 输出Aawk 'BEGIN {printf"%f\n",999}' 输出999.000000格式化输出:awk'{printf "%-15s %s\n",$1,$3}' temp 将第一个域全部左对齐显示其他awk用法:向一行awk命令传值:awk '{if ($5<AGE) print $0}' AGE=10 tempwho | awk '{if ($1==user) print $1 " are in " $2 ' user=$LOGNAME使用环境变量awk脚本命令:开头使用 !/bin/awk -f ,如果没有这句话自含脚本将不能执行,例子:1.!/bin/awk-f2.# allcomment lines must start with a hash '#'3.#name: student_tot.awk4.# tocall: student_tot.awk grade.txt5.#prints total and average of club student points6.7.#print a header first8.BEGIN9.{10.print"Student Date Member No. Grade AgePoints Max"11.print"Name Joined Gained Point Available"12.print"=============================== =================================="13.}14.#let's add the scores of points gained15.(tot+=$6);16.#finished processing now let's print the total and averagepoint17.END18.{19.print "Club student total points :" tot20.print "Average Club Student points :" tot/N21.}[plain] view plaincopyprint?1.awk数组:awk的循环基本结构 For (element in array) print array[element]awk'BEGIN{record="123#456#789";split(record,myarray,"#")} END { for (i in myarray) {print myarray[i]} }[html] view plaincopyprint?1.awk -v MASS_UNPLUG=$MASS_UNPLUG '2.{3.<PRE class=html name="code"><SPAN style="WHITE-SPACE: pre"></SPAN>if ($0 ~ /^\/dev\/sd/) {4.<SPAN style="WHITE-SPACE: pre"></SPAN>print "umount " $2;5.<SPAN style="WHITE-SPACE: pre"></SPAN>if (system("umount " $2)) {6.<SPAN style="WHITE-SPACE: pre"></SPAN>print "umount fail!";7.<SPAN style="WHITE-SPACE: pre"></SPAN>if ($2 ~ /nand/) {8.<SPAN style="WHITE-SPACE: pre"></SPAN>if (plug_devs) {9.<SPAN style="WHITE-SPACE: pre"></SPAN>plug_devs = plug_devs " /dev/ null";10.<SPAN style="WHITE-SPACE: pre"></SPAN>} else {11.<SPAN style="WHITE-SPACE: pre"></SPAN>plug_devs = "/dev/null";12.<SPAN style="WHITE-SPACE: pre"></SPAN>}13.<SPAN style="WHITE-SPACE: pre"></SPAN>}14.<SPAN style="WHITE-SPACE: pre"></SPAN>}15.<SPAN style="WHITE-SPACE: pre"></SPAN>}</PRE>}END {system("echo \"/usr/mas s /dev/null&\" >> " MASS_UNPLUG);print "/usr/mass " plug_de vs " &";system("/usr/mass " plug_devs " &");} ' /proc/mounts<P ></P>16.<PRE></PRE>17.<BR>18.上面是我遇到的一个AWK的样例:19.<P></P>20.<P>功能就是:查找/proc/mount 文件中记录的一些挂载节点数据!</P>21.<P><BR>22.</P>23.<P></P>24.<BR>。

linux常用命令awk的用法

linux常用命令awk的用法

linux常用命令awk的用法awk 是一个强大的文本处理工具,它能用来搜索、分析和抽取文本中的信息,是linux系统中常用的命令,也是编写shell脚本编程时必不可少的工具。

awk 命令根据用户指定的模式对文件内容进行分析处理,并将结果打印出来。

awk 命令通常包含三个部分:1、模式(Pattern)。

用于指定对文件的操作,比如当前行的字符数、格式是否正确等等。

2、动作(Action)。

指定在模式匹配时要采取的操作,比如打印出指定的字段,统计某些字段的总和,替换文字等等。

3、输入文件。

指定要被 awk 命令处理的文件,如果没有指定,则默认使用标准输入流 STDIN 。

AWK 的语法:awk [options] 'pattern {action}' file1 file2 …在上面的语法中,options 用于指定 awk 命令的运行参数,pattern 用于指定要匹配的文本模式,action 表示要对匹配的文本模式采取的操作,file1 file2 … 表示要被处理的文件,如果没有指定文件,则默认使用标准输入流 STDIN 。

AWK 的功能:1、AWK 可以根据输入行的模式自动地进行分类,并且可以把分类后的行写出到指定的文件中。

2、AWK 能够自动地将输入的数据分割成若干字段,并根据用户指定的Pattern 和 Action 对每一行进行处理。

3、AWK 提供了大量的内置函数,可以方便地操作字符串和数字。

4、AWK 能够利用用户自定义的函数进行更复杂的处理。

5、AWK 能够用来编写简单的程序来处理数据文件,而不需要编写C/C++ 程序。

AWK 的示例:1、统计某个文件中每行的字符数:awk '{print NR, " : ", length($0); }' filename上面的命令中,NR 表示当前行号,length($0) 表示当前行的字符数,filename 表示要处理的文件。

Linux命令:awk

Linux命令:awk

Linux命令:awk⼆.grep、sed、awk⽐较1.grep更适合单纯的查找或匹配⽂本2.sed更适合对匹配到的⽂本进⾏编辑3.命令awk更适合⽂本格式化,对⽂本进⾏较复杂的格式处理三.awk基本语法awk [options] 'pattern{action}' fileeg:vim test.txtABC 123 JackDEF 456 AliceGHI 789 Amy1.在没有options和pattern的情况下awk '{print}' test.txt//输出全⽂awk '{print $2}' test.txt//输出第⼆列awk '{print $2$1$3}' test.txt//调整第⼆列和第⼀列,并去掉中间的空格awk '{print $1,$2+1,$3}' test.txt//输出全⽂,第⼆列做+1计算2.pattern包括两种特殊模式,分别是BEGIN和END(1)BEGIN模式,是指命令在处理⽂本之前执⾏awk 'BEGIN{print "col1","col2","col3"}{print}' test.txtcol1 col2 col3ABC 123 JackDEF 456 AliceGHI 789 Amy(2)END模式,是指命令在处理⽂本之后执⾏awk '{print} END{print "end1","end2","end3"}' test.txtABC 123 JackDEF 456 AliceGHI 789 Amyend1 end2 end3(3)BEGIN和END同时存在时,其中,BEGIN和END之间的{}相当于⼀个循环体,对⽂件中的每⼀⾏进⾏处理awk 'BEGIN{print "col1","col2","col3"} {print} END{print "end1","end2","end3"}' test.txtcol1 col2 col3ABC 123 JackDEF 456 AliceGHI 789 Amyend1 end2 end33.常⽤的参数(1) -F,⽤于指定输⼊分隔符cp test.txt z.txtsed -i 's/查找字段/替换字段/g' filesed -i 's/ /:/g' z.txt//查找空格,⽤:替换cat z.txtABC:123:JackDEF:456:AliceGHI:789:Amyawk -F':' '{print $1,$2}' z.txt//以:分割awk -F' ' '{print $1,$2}' test.txt(2) -v,⽤于设置变量的值echo | awk -v v=100 '{print v}'echo | awk -v v1=1 -v v2=2 '{print v1,v2}'四.变量awk中变量分为内置变量和⾃定义变量两种1.内置变量FS 输⼊字段分隔符,默认为空⽩字符OFS 输出字段分隔符,默认为空⽩字符RS 输⼊记录分隔符(输⼊换⾏符),指定输⼊时的换⾏符ORS 输出记录分隔符(输出换⾏符),指定输出时的换⾏符NF 当前⾏的字段数(当前⾏被分隔符分割成了⼏段)NR 当前⾏的⾏号FNR 不同⽂件分别计数FILENAME 当前⽂件名ARGV 数组,保存的是命令⾏所给定的各参数ARGC ARGV数组的个数需要注意的是使⽤变量时,要使⽤-v选项指定对应的变量awk -v FS=':' -v OFS='#' '{print $1,$2}' z.txtABC#123DEF#456GHI#789awk -v FS=':' -v OFS='#' -v ORS='\n+++\n' '{print $1,$2}' z.txtABC#123+++DEF#456+++GHI#789+++awk -v RS='\n' '{print NR,$0}' test.txt//以\n为换⾏符,输出⾏号和每⾏内容1 ABC 123 Jack2 DEF 456 Alice3 GHI 789 AmyNF:当前⾏的字段数,其中$NF表⽰的是最后⼀个字段的内容,$(NF-1)表⽰的是倒数第⼆个字段的内容awk '{print NF,$0}' test.txt3 ABC 123 Jack3 DEF 456 Alice3 GHI 789 Amyawk '{print NF,$0,$1}' test.txt3 ABC 123 Jack ABC3 DEF 456 Alice DEF3 GHI 789 Amy GHIawk '{print NF,$NF,$0,$1}' test.txt3 Jack ABC 123 Jack ABC3 Alice DEF 456 Alice DEF3 Amy GHI 789 Amy GHINR:当前⾏号awk '{print NR,$0}' test.txt1 ABC 123 Jack2 DEF 456 Alice3 GHI 789 Amyawk '{print NR,$0,$NR}' test.txt1 ABC 123 Jack ABC2 DEF 456 Alice 4563 GHI 789 Amy Amywc -l test.txt //wc -l显⽰⾏数3 test.txtawk 'END{print NR}' test.txt3FNR:不同⽂件分别计数FILENAME:显⽰当前⽂件名awk '{print FNR,$0}' test.txt z.txt1 ABC 123 Jack2 DEF 456 Alice3 GHI 789 Amy1 ABC:123:Jack2 DEF:456:Alice3 GHI:789:Amyawk '{print FILENAME,FNR,$0}' test.txt z.txttest.txt 1 ABC 123 Jacktest.txt 2 DEF 456 Alicetest.txt 3 GHI 789 Amyz.txt 1 ABC:123:Jackz.txt 2 DEF:456:Alicez.txt 3 GHI:789:Amy2.⾃定义变量(1)使⽤-v来⾃定义变量(2)在awk中直接定义awk 'BEGIN{v=11;print v}'五.格式化中,awk使⽤printf时需要注意的问题1.使⽤printf输出的⽂本不会换⾏,使⽤'\n'转义换⾏2.使⽤printf输出时,指定的格式与被格式化的⽂本之间要⽤‘,’隔开3.使⽤printf输出时,格式中格式替换符必须与被格式化的⽂本⼀⼀对应awk '{printf "%.2f\n",$2}' test.txt123.00456.00789.00六.awk中的pattern模式当awk进⾏逐⾏处理时,会把pattern作为条件,判断当前⾏是否满⾜条件,若匹配则进⾏后⾯的处理,否则跳过该⾏。

如何在shell中统计某字符串的个数

如何在shell中统计某字符串的个数
Байду номын сангаас
查找字符a在a.txt中出现的次数(字符串也是一样):
$ grep -o 'a' a.txt | wc -l --> 6 $ awk -v RS="@#$j" '{print gsub(/a/,"&")}' a.txt --> 6 $ awk '{s+=gsub(/a/,"&")}END{print s}' a.txt --> 6
611053请尝试刷新页面或更换浏览器重试
如何在 shell中统计某字符串的个数
在工作生活当中我们可能会遇到许许多多的问题,例如在Linux环境如何统计某字符串在文件的个数呢?以下3种方式可以解决:
1.通过使用grep查找命令
$ grep -o '字符串' file | wc -l
2.通过使用awk命令进行统计
$ awk -v RS="@#$j" '{print gsub(/字符串/,"&")}' file
3.使用awk命令的另一种方式
$ awk '{s+=gsub(/字符串/,"&")}END{print s}' file
下面来测试一下:
首先建了一个文件a.txt,然后添加了一串字符
$ cat a.txt --> aabbccdd asdfabcd ablicals

Linux中shell去除空行的几种方法

Linux中shell去除空行的几种方法
有时我们在处理和查看文件时经常会有很多空行为了美观或是有需要时就有必要把这些除行去掉了方法如下
Linux中 shell去除空行的几种方法
有时我们在处理和查看文件时,经常会有很多空行,为了美观或是有需要时,就有必要把这些除行去掉了,方法如下: #如需将结果输出加入重定向 > 文件名
1)用tr命令
代码如下: cat 文件名 |tr -s '\n&#at 文件名 |awk '{if($0!="")print}' cat 文件名 |awk '{if(length !=0) print $0}'
4)用grep命令
代码如下: grep -v '^$' 文件名
例如: 文件名为 test.txt 则 cat test.txt |tr -s '\n'
追加到文件: cat 文件名 |tr -s '\n' >文件名 限。
#此处两个文件名相同时候,就达到了清除文件中空行的效果,重定向后请注意文件的权
以下其它方法同理。
2)用sed命令
代码如下: cat 文件名 |sed '/^$/d'
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

RLENGTH
由match函数所匹配的字符串的长度。
RS
记录分隔符(默认是一个换行符)。
RSTART
由match函数所匹配的字符串的第一个位置。
SUBSEP
数组下标分隔符(默认值是34)。
5. awk运算符
如果为真,则进行忽略大小写的匹配。
NF
当前记录中的字段数。
NR
当前记录数。
OFMT
数字的输出格式(默认值是%.6g)。
OFS
输出字段分隔符(默认值是一个空格)。
ORS
输出记录分隔符(默认值是一个换行符)。
变量NR:一个计数器,每处理完一条记录,NR的值就增加1。如$ awk '{print NR,$0}' test将输出test文件中所有记录,并在记录前显示记录号。
6.2. 域
记录中每个单词称做“域”,默认情况下以空格或tab分隔。awk可跟踪域的个数,并在内建变量NF中保存该值。如$ awk '{print $1,$3}' test将打印test文件中第一和第三个以空格分开的列(域)。
$0
完整的输入记录。
ARGC
命令行参数的数目。
ARGIND
命令行中当前文件的位置(从0开始算)。
ARGV
包含命令行参数的数组。
CONVFMT
数字转换格式(默认值为%.6g)
ENVIRON
环境变量关联数组。
B
匹配单词内的空字符串。
<
匹配一个单词的开头的空字符串,锚定开始。
>
匹配一个单词的末尾的空字符串,锚定末尾。
w
匹配一个字母数字组成的单词。
W
匹配一个非字母数字组成的单词。

匹配字符串开头的一个空字符串。
变量或数组赋值
输出命令
内置函数
控制流命令
4. awk的环境变量
Table 1. awk的环境变量
变量
描述
$n
当前记录的第n个字段,字段间由FS分隔。
1. awk简介
awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk的处理文本和数据的方式是这样的,它逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行你想要的操作。如果没有指定处理动作,则把匹配的行显示到标准输出(屏幕),如果没有指定模式,则所有被操作所指定的行都被处理。awk分别代表其作者姓氏的第一个字母。因为它的作者是三个人,分别是Alfred Aho、Brian Kernighan、Peter Weinberger。gawk是awk的GNU版本,它提供了Bell实验室和GNU的一些扩展。下面介绍的awk是以GUN的gawk为例的,在linux系统中已把awk链接到gawk,所以下面全部以awk进行介绍。
打印简短的版权信息。
-W help or --help, -W usage or --usage
打印全部awk选项和每个选项的简短说明。
-W lint or --lint
打印不能向传统unix平台移植的结构的警告。
-W lint-old or --lint-old
$2 == "*" {printf("line %d, no password: %sn",NR,$0)}'
2. awk命令格式和选项
2.1. awk的语法有两种形式
awk [options] 'script' var=value file(s)
awk [options] -f scriptfile var=value file(s)
10. 比较表达式
conditional expression1 ? expression2: expression3,例如:$ awk '{max = {$1 > $3} ? $1: $3: print max}' test。如果第一个域大于第三个域,$1就赋值给m。该语法不能包括BEGIN和END模式。
BEGIN:让用户指定在第一条输入记录被处理之前所发生的动作,通常可在这里设置全局变量。
END:让用户在最后一条输入记录被读取之后发生的动作。
3.2. 操作
操作由一人或多个命令、函数、表达式组成,之间由换行符或分号隔开,并位于大括号内。主要有四部份:
打印关于不能向传统unix平台移植的结构的警告。
-W posix
打开兼容模式。但有以下限制,不识别:x、函数关键字、func、换码序列以及当fs是一个空格时,将新行作为一个域分隔符;操作符**和**=不能代替^和^=;fflush无效。
-W re-interval or --re-inerval
输出域的分隔符默认是一个空格,保存在OFS中。
7. gawk专用正则表达式元字符
一般通用的元字符集就不讲了,可参考我的Sed和Grep学习笔记。以下几个是gawk专用的,不适合unix版本的awk。
Y
匹配一个单词开头或者末尾的空字符串。
3.1. 模式
模式可以是以下任意一个:
/正则表达式/:使用通配符的扩展集。
关系表达式:可以用下面运算符表中的关系运算符进行操作,可以是字符串或数字的比较,如$2>%1选择第二个字段比第一个字段长的行。
模式匹配表达式:用运算符~(匹配)和~!(不匹配)。
ERRNO
最后一个系统错误的描述。
FIELDWIDTHS
字段宽度列表(用空格键分隔)。
FILENAME
当前文件名。
FNR
同NR,但相对于当前文件。
FS
字段分隔符(默认是任何空格)。
IGNORECASE
允许间隔正则表达式的使用,参考(grep中的Posix字符类),如括号表达式[[:alpha:]]。
-W source program-text or --source program-text
使用program-text作为源代码,可与-f命令混用。
-W version or --version
打印bug报告信息的版本。
3. 模式和操作
awk脚本是由模式和操作组成的:
pattern {action} 如$ awk '/root/' test,或$ awk '$3 < 100' test。
两者是可选的,如果没有模式,则action应用到全部记录,如果没有action,则输出匹配全部记录。默认情况下,每一个输入行都是一条记录,但用户可通过RS变量指定不同的分隔符进行分隔。
'
匹配字符串末尾的一个空字符串。
8. POSIX字符集
可参考我的Grep学习笔记
9. 匹配操作符(~)
用来在记录或者域内匹配正则表达式。如$ awk '$1 ~/^root/' test将显示test文件第一列中以root开头的行。
字段引用
in
数组成员
6. 记录和域
6.1. 记录
awk把每一个以换行符结束的行称为一个记录。
记录分隔符:默认的输入和输出的分隔符都是回车,保存在内建变量ORS和RS中。
$0变量:它指的是整条记录。如$ awk '{print $0}' test将输出test文件中的所有记录。
< <= > >= != ==
关系运算符
空格
连接
+ -
加,减
* / &
乘,除与求余
+ - !
一元加,减和逻辑非
^ ***
求幂
++ --
增加或减少,作为前缀或后缀
$
$ awk '$1 + $2 < 100' test。如果第一和第二个域相加大于100,则打印这些行。
$ awk '$1 > 5 && $2 < 10' test,如果第一个域大于5,并且第二个域小于10,则打印这些行。
11. 范围模板
范围模板匹配从第一个模板的第一次出现到第二个模板的第一次出现之间所有行。如果有一个模板没出现,则匹配到开头或末尾。如$ awk '/root/,/mysql/' test将显示root第一次出现到mysql第一次出现之间的所有行。
-f scripfile or --file scriptfile
从脚本文件中读取awk命令。
-mf nnn and -mr nnn
对nnn值设置内在限制,-mf选项限制分配给nnn的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。
6.3. 域分隔符
内建变量FS保存输入域分隔符的值,默认是空格或tab。我们可以通过-F命令行选项修改FS的值。如$ awk -F: '{print $1,$5}' test将打印以冒号为分隔符的第一,第五列的内容。
可以同时使用多个域分隔符,这时应该把分隔符写成放到方括号中,如$awk -F'[:t]' '{print $1,$3}' test,表示以空格、冒号和tab作为分隔符。
相关文档
最新文档