linux的awk命令

awk命令可参考:https://www.cnblogs.com/xudong-bupt/p/3721210.html

                            http://www.zsythink.net/archives/1336

二、awk介绍

   awk是一个文本分析工具,简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。awk是一门编程语言,支持条件判断、数组和循环等功能,所以,可以把awk理解为一个脚本语言解释器。

    grep、sed和awk被称为linux中的“三剑客”,其中,

    grep适合单纯的查找或者匹配文本;

    sed适合编辑匹配到的文本;

    awk适合格式化文本,对文本进行较复杂的格式化处理。

 

  awk命令形式:

 awk [-F|-f|-v] ‘BEGIN{} //{command1; command2} END{}’ file
 
 

 2.1 awk基础学习:

    2.1.1、首先使用echo向testd中写入“ddd”字符串,然后使用awk命令将文件中的内容输出。

    echo中的重定向:能够把内容输出到文件里而不是标准输出


 
 
  1. Mine-Wyao:~ $ echo ddd > testd
  2. Mine-Wyao:~ $ awk '{print}' testd
  3. ddd
echo ddd > testd Mine-Wyao:~ $ awk '{print}' testd ddd

 

df命令作用是列出文件系统的整体磁盘空间使用情况。可以用来查看磁盘已被使用多少空间和还剩余多少空间。示例如下:

 

    2.1.2 使用df命令将系统磁盘的使用情况打印出来,使用df | awk '{print $5}' 命令打印第5列(Capacity)的内容。    


 
 
  1. Mine-Wyao:~ $ df | awk '{print $NF}'
  2. on                        # 使用 $NF指令打印最后一列的内容。
  3. /                         # NF表示分割后,一共有几个字段。
  4. /dev
  5. /net
  6. /home
  7. Mine-Wyao:~ $
df | awk '{print $NF}' on                        # 使用 $NF指令打印最后一列的内容。 /                         # NF表示分割后,一共有几个字段。 /dev /net /home Mine-Wyao:~ $

 

特殊要点:

		<p>$0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;表示整个当前行</p>

		<p>$n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;每行第n个字段</p>

		<p>NF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; 字段数量变量</p>

		<p>NR &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;每行的记录号,多文件记录递增</p>

		<p>FNR &nbsp; &nbsp; &nbsp; &nbsp;与NR类似,不过多文件记录不递增,每个文件都从1开始</p>

		<p>\t &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;制表符</p>

		<p>\n &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 换行符</p>

		<p>FS &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;BEGIN时定义分隔符</p>

		<p>RS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;输入的记录分隔符, 默认为换行符(即文本是按一行一行输入)</p>

		<p>~ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;匹配,与==相比不是精确比较</p>

		<p>!~ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 不匹配,不精确比较</p>

		<p>== &nbsp; &nbsp; &nbsp; &nbsp; 等于,必须全部相等,精确比较</p>

		<p>!= &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 不等于,精确比较</p>

		<p>&amp;&amp;  &nbsp; &nbsp; 逻辑与</p>

		<p>|| &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 逻辑或</p>

		<p>+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;匹配时表示1个或1个以上</p>

		<p>/[0-9][0-9]+/ &nbsp; 两个或两个以上数字</p>

		<p>/[0-9][0-9]*/ &nbsp; &nbsp;一个或一个以上数字</p>

		<p>FILENAME 文件名</p>

		<p>OFS &nbsp; &nbsp; &nbsp;&nbsp;输出字段分隔符, 默认也是空格,可以改为制表符等</p>

		<p>ORS &nbsp; &nbsp; &nbsp; &nbsp; 输出的记录分隔符,默认为换行符,即处理结果也是一行一行输出到屏幕</p>

		<p>-F'[:#/]' &nbsp; 定义三个分隔符</p>
		</td>
	</tr></tbody></table></div><p>&nbsp; &nbsp; awk逐行处理文本,按照指定的分隔符,将行分割为多个字段,<span style="color:#ff9900;">如果没有指定分隔符,默认使用空格作为分隔符,</span><span style="color:#000000;">每个字段按照顺序,分别对应到awk的内置变量中,比如,分割完的第一个字段为$1,第二个字段为$2,依次类推,用$0表示当前处理的整个一行。</span><span style="color:#000000;">使用</span><span style="color:#000000;">awk '{print $1,$2}' testd</span><span style="color:#000000;">指令输出指定列的内容。</span></p>

    将自己想要添加的字段写在文件中,可以按照如下做法:

    * 将字符进行拼接,或者将一个字符当作新的列进行插入操作

 

    如果在$1字符上加上双引号“”,则将会打印其地址信息。

 

三、awk特殊模式

    3.1.1 awk的两种特殊模式Begin和End。Begin模式指定了处理文本之前需要执行的操作;而End模式指定了处理完所有行之后需要执行的操作。

四、awk的分隔符

    4.1.1 如果不指定分隔符的话,则awk默认使用的分隔符为空格。首先使用-F选项,指定分隔符。如下图,使用“-F#”指定使用“#”作为分隔符。

    通过awk内置变量FS指定分隔符,但是在使用的时候,要在前面添加-v选项,如下图示例,“-v FS='#'”

    awk通过OFS选项指定输出格式,按照指定的格式输出到标准输出流。如下图,“-v OFS='+++'”

    4.2.2 awk '{print $1 $2}' (没有逗号分隔)表示每行分隔后,将第一个字段和第二个字段连接在一起进行输出。

            awk '{print $1,$2}' (有逗号进行分隔)表示将第一列和第二列以输出分隔符分隔输出。     

五、awk的常用变量操作

    5.1 对于awk来说,变量分为内置变量和自定义变量。内置变量就是预定义好、安置在awk内部的可直接使用的变量。而自定义变量就是用户自定义的变量。

    awk常用的内置变量如下所述,

 

FS输入字段分隔符,默认为空白字符。(空格)
OFS输出字段分隔符,默认为空白字符。(空格)
RS输入记录分隔符(输入换行符),指定输入时的换行符。
ORS输出记录分隔符(输出换行符),输出时用指定符号代替换行符。
NFNumber Of Field,当前行的字段的个数,(当前行被分成了几列),字段数量。
NR行号,当前处理的文本行的行号。
FNR各文件分别计数的行号。
FILENAME当前文件名。
ARGC命令行参数的个数。
ARGV数组,保存的是命令行所给定的各参数。

5.2 使用awk内置的NR命令显示行号,使用NF命令显示此行有几个字段

    将行内容全部输出($0),使用NR命令输出行号。

    使用FNR命令,会分别将每个文件分开计数行号。如下图。

    使用-v RS=“ ”命令,以空格作为行分隔符,效果如下图所示。

    输出指令-v ORS="+++"将换行符转换层“+++”进行输出。

    FILENAME指令用来输出文件名称。

    ARGV内置变量表示的是一个数组,数组中保存的是命令行所给定的参数,数组下标都是从0开始的,此处,ARGV[0]表示的是awk命令。

    ARGV代表数组,而ARGC代表数组的长度,也即是参数的个数。

    5.3 awk的自定义变量

    定义自定义变量有两种方式:

    方法一:-v varname=value ,变量名字符区分大小写。

    方法二:在program中直接定义。

    通过方法一自定义变量,如下图:

    通过方法二自定义变量,变量定义与动作之间用分号“ ;”隔开,如下图:

六、awk的格式化操作

    print输出操作会输出换行符,而printf输出操作不会输出换行符,默认会将文本输出在一行里面。使用指定的格式符进行操作,如“%s\n”,指定换行符(\n)。

    当传入多个参数时,这多个参数可重复的使用同一个格式替换符。printf指令与printf动作唯一区别是,printf动作需要使用逗号“ ,”将列之间隔开,而printf指令则不需要添加隔开符号。

    在awk中使用printf动作时,需要注意:

(1)使用printf动作时输出文本不会换行,如果需要进行换行,则需要在对应的“格式替代符”后加入“\n“进行转义;

(2)使用printf动作时,“指定的格式”与“被格式化的文本”之间,需要用逗号“ ,”隔开;

(3)使用printf动作时,格式中的“格式替代符”必须与文本一一对应。

七、awk动作详解

    在awk中有许多的动作指令,其中最常用的就是if…else if…else…语句,这与常用的编程语言中的条件判断语句用法相同,也是控制语句的一种,当然也有for循环和while循环、continue、break两种格式,不过在使用的过程中要注意"{"、"}"的使用。exit命令表示退出当前脚本,如果有END指令,则直接跳到END指令执行。

八、awk中的数组

    awk中的数组可以直接进行赋值,无需进行声明。元素的值可以为空字符串。当数组中不含要打印的字符串时,强行输出,会造成输出空字符串的情况出现,并且直接引用这个不存在的元素,会直接输出空字符串,如下图所示,    

    使用delete可以直接删除数组中的元素。

九、awk常用内置函数

    使用rand()函数生成随机数字,但是要和srand()函数配合使用,否则返回的值将一直不变。

    gsub()或sub()函数用来替换文本中的字符。length()获取指定字符串的长度。index()函数获取指定字符在字符串中出现的位置。split()函数使用指定符号分隔字符串,形成数组。asort()函数根据元素的值进行排序

    后续待补充!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux awk命令是一种强大的文本分析工具,它可以帮助用户从文本文件或标准输入抽取信息并进行处理。下面是关于awk命令的一些基本用法、工作流程、常用选项参数说明、实操案例和常用awk的内置变量: 1. 基本用法 awk命令的基本语法为: ``` awk 'pattern {action}' file ``` 其,pattern是一个模式,用于匹配文件的文本;action是一个动作,用于在匹配到的文本上执行的操作;file是要处理的文件名。 2. 工作流程 awk命令的工作流程如下: - 读入文件的第一行,并根据指定的分隔符将其分割成多个字段。 - 对于每一行,awk命令都会执行pattern-action语句,如果pattern匹配成功,则执行action操作。 - 重复执行步骤2,直到文件的所有行都被处理完毕。 3. 常用选项参数说明 - -F:指定输入文件的分隔符。 - -v:定义一个变量并赋值。 - -f:指定awk程序文件的路径。 4. 实操案例 假设有一个名为test.txt的文件,内容如下: ``` Tom 20 male Jerry 18 female Mike 22 male ``` 现在我们想要从抽取出所有男性的姓名和年龄,可以使用如下命令: ``` awk '$3=="male"{print $1,$2}' test.txt ``` 输出结果为: ``` Tom 20 Mike 22 ``` 5. 常用awk的内置变量 - $0:表示整个文本行。 - $1、$2、$3...:表示文本行的第1、2、3...个字段。 - NR:表示awk已经读入的记录数。 - NF:表示当前记录的字段数。 - FS:表示输入字段分隔符。 - RS:表示输入记录分隔符。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值