系统相关
首页 > 系统相关> > linux命令_awk

linux命令_awk

作者:互联网

awk

linux命令_sed

AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。

之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。

学习具体使用前,先来看下 awk 能干些什么事情:

1. 能够将给定的文本内容,按照我们期望的格式输出显示,打印成报表。

2. 分析处理系统日志,快速地分析挖掘我们关心的数据,并生成统计信息;

3. 方便地用来统计数据,比如网站的访问量,访问的 IP 量等;

4. 通过各种工具的组合,快速地汇总分析系统的运行信息,让你对系统的运行了如指掌;

5. 强大的脚本语言表达能力,支持循环、条件、数组等语法,助你分析更加复杂的数据;

……

当然 awk 不仅能做这些事情,当你将它的用法融汇贯通时,可以随心所欲的按照你的意愿,来进行高效的数据分析和统计。

不过我们需要知道,awk 不是万能的,它比较擅长处理格式化的文本,比如 日志csv 格式数据等;

awk和sed的区别

sed的核心是正则,对于sed, 基本的两个概念是匹配和行为。

  1. 匹配是通过区域选择加上正则表达式实现,比如“3到6行以This开头的”
  2. 行为是增删改查。可以在某个位置新增或删除一行,可以通过正则表达式进行变量替换,可以显示满足某些条件的行。配合shell的批处理就会很强大, 比如我想把所有文件的开头添加一个注释,比如我想把所有文件的某一个变量进行替换,比如我想把所有文件满足某些条件的行进行合并和拆分。
  3. 同时,sed提供了一个保持空间(hold space)可以实现逆序输出等操作。
  4. 另外,sed的用法非常灵活,你可以将匹配和行为进行不同的嵌套,举个复杂的例子“将第某行到某行之间的满足A条件的里面满足B条件的行进行C操作和D操作并且将E条件的行进行F操作”这样的灵活组合方式怕是也只有sed了

awk,经常用于格式化输出,也就是将数据按照我们想要的方式来显示,并且可以做一些基本的统计工作。

  1. 它的运作模式是“预处理+逐行处理+最终处理”。一般我们只用“逐行处理”比如对于满足条件的某些行,我们打印某某列。通过指定分隔符,我们很容易的对列进行操作。
  2. 预处理来定义变量,逐行处理来修改变量,最终处理来打印变量。

awk的使用

awk 'BEGIN{ commands } /pattern/ {commands} END{ commands }'

1、BEGIN{ commands }开始块就是在程序启动的时候执行的代码部分,并且它在整个过程中只执行一次。一般情况下,我们可以在开始块中初始化一些变量。
注意:开始块部分是可选的,你的程序可以没有开始块部分。
2、/pattern/ {commands}pattern 部分匹配该行内容成功后,才会执行commands 的内容。
3 END{ commands }结束块是在程序结束时执行的代码。
注意:结束块部分也是可选的

awk的语法

awk [选项参数] 'script' var=value file(s)
或
awk [选项参数] -f scriptfile var=value file(s)
选项
-F fs or --field-separator fs 指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F:。
-v var=value or --asign var=value -va=1赋值一个用户定义变量a的值为1
-f -f scripfile,从脚本文件中读取awk命令
-mf nnn and -mr nnn 对nnn值设置内在限制,-mf选项限制分配给nnn的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。
-W compact or --compat, -W traditional or --traditional 在兼容模式下运行awk。所以gawk的行为和标准的awk完全一样,所有的awk扩展都被忽略。
-W copyleft or --copyleft, -W copyright or --copyright 打印简短的版权信息。
-W help or --help, -W usage or --usage 打印全部awk选项和每个选项的简短说明。
-W lint or --lint 打印不能向传统unix平台移植的结构的警告。
-W source program-text or --source program-text 使用program-text作为源代码,可与-f命令混用。

awk常用变量

变量 描述
$n $1当前记录的第1个字段的内容和sed中的$1不同,sed表示第一个参数
$0 整行数据的内容
FS 字段分隔符(默认是空格)
OFS 输出字段的分隔符(默认是空格)
RS 行分隔符(默认以\n作为一行的结尾),单行分割成多行用到
NR 行号,从1开始,多文件时候也是连续接着计数
FNR 各文件分别计数的行号,多文件的时候会和NR不同,它会重新计数
NF 一行中字段数量,最后一个字段内容可以用$NF取出
ARGC 命令行参数的数目
ARGV 包含命令行参数的数组,第一个参数是命令awk

awk格式化

字符 功能
%d 十进制有整数符号
%u 十进制无整数符号
%f 浮点数
%s 字符串
%c 单个字符
%p 指针的值
%e 指数形式的浮点数
%x,%X 无符号以十六进制表示的整数
%0 无符号以八进制表示的整数
%g 自动选择合适的表示法
\n 换行
\f 清屏并换页
\t Tab符号
\xhh 表示一个ASCII码用16进表示,其中hh是1到2个16进制数
\r 回车

示例

awk '{[pattern] action}' {filenames}   # 行匹配语句 awk '' 只能用单引号
awk [选项] '匹配规则和处理规则 ' [处理文本路径]
标准输出 | awk [选项] '匹配规则和处理规则 '
BEGIN{} : BEGIN是在awk处理文本之前运行
// : 使用的匹配规则
{} :循环(每次只处理一行数据)
END{} :当所有的处理全部执行完毕之后,执行END中的相关操作

标签:sbin,etc,passwd,nologin,命令,awk,linux,root
来源: https://www.cnblogs.com/ivanlee717/p/16292056.html