linux获取awk命令 linux awk命令详解( 三 )


2、shell脚本方式
将所有的awk命令插入一个文件,并使awk程序可执行,然后awk命令解释器作为脚本的首行,一遍通过键入脚本名称来调用 。
相当于shell脚本首行的:#!/bin/sh
可以换成:#!/bin/awk
3、将所有的awk命令插入一个单独文件 , 然后调用:
awk-f awk-script-file input-file(s)
其中,-f选项加载awk-script-file中的awk脚本,input-file(s)跟上面的是一样的 。
Linux入门系列——awk命令详解【linux获取awk命令 linux awk命令详解】 awk是一个强大的文本分析工具,与grep、sed相比,awk在对数据分析并生成报告时 , 显得有很大的优势 。
awk有三个不同的版本:awk、nawk和gawk,在没有做特殊说时的时候默认的就是gawk,gawk是awk的GNU版本 。
其中command是真正的awk命令 , -F表示域的分隔符,是个可选项 。Filename是等待处理的文件
将所有的awk命令写入到一个文件,并使用该文件有X权限,然后awk命令解释器作为脚本的首行,也就是说可以把脚本最开始的 #!/bin/bash换成 #!/bin/awk
最后直接执行这个脚本文件就行了 。
-f 指定要加载的awk脚本 , 是一个文件 。Filename是等待处理的文件
awk的工作流程是这样的:读入一行后(最后面带有” ”的),就按-F指定的分隔符来将该行划分成N个区域,$0表示所有的区域,$1表示第一个域,$2表示第二个域,依此类推,$n表示第n个域 。
总结:awk先执行BEGIN内的命令,然后再读入文件中的行,接着就是按照指定的分隔符将该行分成N个区域,然后再来执行模式所对应的动作action 。然后,再来读入第二行 。。再重复执行action,直到所有的行都处理完成 。最后再执行END中的命令 。
注意:' // '之间是支持正则表达式的 , 如果此处只有pattern,而没有action,那么awk默认会把匹配到的行打印出来 。
awk中的print还可以使用C语言中的printf来替代 。在输出格式比较复杂的时候使用printf函数会比print函数要更直观一些,如下:
还可以使用-v key=value来自定义变量 。如下:
awk中的条件语句是从C中借鉴过来的
语法:if (condition) {then-body} else {else-body}
例如使用awk来统计某个目录下的普通文件的大小 , 不包括子目录的,并过滤掉目录 。
循环语句也和C中的一样 , 支持while、do/while、for、continue、break等关键字 。
break和continue常用于循环中;
在awk中,数组的下标可以是数字或字母 。一般awk中的数组的作用是从记录中收集信息,用于计算总和、统计单词等 。
在awk中要删除一个元素的时候使用 delete array[index]
更多请参见awk官方文档[]
Linux下用awk获取某一行或某一列的查询结果背景:可能我们会遇到获取Linux命令执行结果的某一列或某一行的信息 。
awk -F'\t''{print $1}'name.txt
其中-F表示分割符,本例为\t,$1表示第1列 ,$0表示全部 。
ls -lrt| awk -F ' ' '{print $NF}'
好处:这种情况下不需要知道所获取信息在哪一列,直接取最后一列即可 。
其中-F表示分割符,本例为空格,$NF表示最后一列,$(NF-1)表示倒数第二列 。
awk 'NR awk 'NR==1,NR==4 {print}'file
行号等于1和4的打印出来
awk 'END {print}' name.txt
部分参考
每日一条linux 命令 : awk 一次读取一行文本 , 按输入分隔符进行切片,切成多个组成部分,将每片直接保存在内建的变量中,$1,$2,$3....,引用指定的变量 , 可以显示指定段,或者多个段 。如果需要显示全部的,需要使用$0来引用 。可以对单个片段进行判断,也可以对所有段进行循环判断 。

推荐阅读