Linux之awk

一:awk为报告生成器

AWK字段:awk对每行文档按照分隔符把行内的内容切成每个字段。

$0:代表整行。

$1...$N:代表被分割符分开的每个字段。



二:awk基本语法

基本语法:awk [options] ‘program‘ file file ...

awk [options] ‘PATTERN{action}‘ file file ...

输入选项: -F  指定分割符选项。

awk   -F :    ‘ {print  $1 ,$7} ‘  /etc/passwd     #指定以冒号作为字段分割符。

PATTERN: awk的输出

print item1, item2, ........

要点:

(1) 各项目之间使用逗号分隔,而输出时则使用输出分隔符分隔;

(2) 输出的各item可以字符串或数值、当前记录的字段、变量或awk的表达式;数值会被隐式转换为字符串后输    出;

(3) print后面item如果省略,相当于print $0输出整串内容;要想后面输出空白,使用pirnt " " (在awk中输出

子串要使用双引号);

awk的变量:内置变量,自定义变量

  内置变量:输入时的字段分隔符 (awk的内置变量前要用BEGIN)

 FS:Field Seperator, 输入时的字段分隔符

#  awk ‘BEGIN{FS=":"}{print $1,$7}‘ /etc/passwd      #内置变量的引用要用到双引号

RS:Record Seperator, 输入行分隔符

#  awk ‘BEGIN{RS=":"}{print }‘ /etc/passwd   #会把冒号分开的内容当作每一行来处理

OFS: Output Field Seperator, 输出时的字段分隔符

     #  awk ‘BEGIN{FS=":";OFS=":"}{print $1,$7}‘ /etc/passwd     #语句与语句之间要用分号分割 (红色部分)

ORS: Outpput Row Seperator, 输出时的行分隔符

         

NF:Numbers of Field,字段数    #取最后一个字段还可用$NF

        

    NR:Numbers of Record, 行数如果后面跟有多个文件的话那么就是所有文件的一并计数;

# awk ‘BEGIN{FS=":";OFS=":"}{print NR $1,$7}‘ /etc/passwd /etc/group


         FNR:行数;各文件分别计数

         # awk ‘BEGIN{FS=":";OFS=":"}{print FNR $1,$7}‘ /etc/passwd

     ARGV:数组,保存命令本身这个字符,awk ‘{print $0}‘ 1.txt 2.txt,意味着ARGV[0]保存awk,

# awk ‘BEGIN{print ARGV[0],ARGV[1],ARGV[2],ARGC}‘ /etc/passwd /etc/group

     ARGC: 保存awk命令中参数的个数

         自定义变量:输入时的字段分隔符 (awk的内置变量前要用BEGIN

 -v var_name=VALUE   变量名区分字符大小写

  (1) 可以program中定义变量;

  (2) 可以命令行中通过-v选项自定义变量;


 # awk ‘BEGIN{a="hello awk"}{print a}‘ /etc/passwd

       #awk ‘BEGIN{a="hello awk";print a}‘  #可以不跟文件  直接输出hello awk


       #awk -v a="hello awk" ‘BEGIN{print a}‘    #直接输出hello awk


 awk的printf命令


命令的使用格式:printf format, item1, item2,...


要点:

  (1) 要指定format;

  (2) 不会自动换行;如需换行则需要给出\n

  (3) format用于为后面的每个item指定其输出格式;


format格式的指示符都%开头,后跟一个字符:

   %c: 显示字符的ASCII码;

   %d, %i: 十进制整数;

   %e, %E: 科学计数法显示数值;

   %f: 显示浮点数;

   %g, %G: 以科学计数法格式或浮点数格式显示数值;

   %s: 显示字符串;

   %u: 显示无符号整数;

   %%: 显示%自身;

  修饰符:

   #:显示宽度

   -:左对齐

   +:显示数值的符号

   .#: 取值精度


# awk -F: ‘{printf "%15s %-15s\n",$1,$7}‘ /etc/passwd

# awk ‘BEGIN {printf "%f\n",3.1415}‘         #显示7个字节

        # awk ‘BEGIN {printf "%f\n",3.1415926}‘     #总位数超过8位,小数点后面要进行四舍五入

# awk ‘BEGIN {printf "%15.2f\n",3.1415926}‘    #15.2 表示整体为15个位宽加小数点后两位

awk输出重定向


print items > output-file

print items >> output-file

print items | command

特殊文件描述符:

/dev/stdin: 标准输入

/dev/stdout: 标准输出

/dev/stderr: 错误输出

awk的操作符

          

算术操作符:

x+y

x-y

x*y

x/y

x**y, x^y

x%y

-x:负值

+x:转换为数值

字符串操作符:连接

赋值操作符:

=

+=

-=

*=

/=

%=

^=

**=

++

--

如果模式自身是=号,要写为/=/

比较操作符:

<

<=

>

>=

==

!=

~:模式匹配,左边的字符串能够被右边的模式所匹配为真,否则为假;

!~:

逻辑操作符:

&&: 与

||:或

条件表达式:

selector?if-true-expression:if-false-expression

# awk -F: ‘{$3>=500?utype="common user":utype="admin or system user";print $1,"is",utype}‘ /etc/passwd

函数调用:

function_name(argu1,argu2)

时间: 2025-01-20 06:12:21

Linux之awk的相关文章

linux sed&awk详解

sed sed为文本处理三剑客之一.本身就是一个管道命令,可以将文件进行增加,修改,删除,选取等操作. 格式:sed [-nrefi] [command] "文本字符串" 选项: -r: 支持扩展正则表达式: -n: 静默模式:(sed有个模式空间和保持空间,默认sed会将执行的结果保存到模式空间里面,而模式空间默认情况是输出在屏幕上,加了-n,则阻止将模式空间的内容输出到屏幕上) -f:/path/to/script_file:从指定的文件中读取脚本并运行 -e script1 -e

利用多核CPU来加速Linux命令 — awk、sed、bzip2、grep、wc

你是否曾经有过要计算一个非常大的数据(几百GB)的需求?或在里面搜索,或其它操作--一些无法并行的操作.数据专家们,我是在对你们说.你可能有一个4核或更多核的CPU,但我们合适的工具,例如 grep, bzip2, wc, awk, sed等等,都是单线程的,只能使用一个CPU内核.借用卡通人物Cartman的话,"如何我能使用这些内核"?要想让Linux命令使用所有的CPU内核,我们需要用到GNU Parallel命令,它让我们所有的CPU内核在单机内做神奇的map-reduce操作

【Linux 工具--AWK】

1. awk简介 awk是一种编程语言,用于在linux/unix下对文本和数据进行处理.数据可以来自标准输入.一个或多个文件,或其它命令的输出.它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具.它在命令行中使用,但更多是作为脚本来使用.awk的处理文本和数据的方式是这样的,它逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行你想要的操作.如果没有指定处理动作,则把匹配的行显示到标准输出(屏幕),如果没有指定模式,则所有被操作所指

Linux中awk后面的RS, ORS, FS, OFS 用法

Linux中awk后面的RS, ORS, FS, OFS 含义 一.RS 与 ORS 差在哪 我们经常会说,awk是基于行列操作文本的,但如何定义"行"呢?这就是RS的作用.  默认情况下,RS的值是\n.下面通过实例来理解下RS. echo '1a2a3a4a5' | awk '{print $1}' 1a2a3a4a5 echo '1a2a3a4a5' | awk 'BEGIN{RS="a"}{print $1}' 1 2 3 4 5我们可以看到,在更改了RS的

Linux三剑客——awk

Linux三剑客--awk DKing~共享 1.1 awk执行过程 awk读入第一行内容 判断是否符合模式中的条件NR>=2(是否让你进入大门) 如果匹配则执行对应的动作{print $0} 如果不匹配条件,继续读取下一行 继续读取下一行 重复以上过程,直到读取到最后一行(EOF:end of field) 1.2 记录和字段 record    表示记录.行           记录相当于行 field       表示区域.字段       字段相当于列 1.2.1 记录(行) awk默认

linux中awk的使用(绝对精华版)

在linux中awk绝对是核心工具,特别是在查找搜索这一领域,和掌握sed命令一样重要 下面为awk的一些基本知识,基于这些知识,可以让你随意操控一个文件: 在awk中:()括号为条件块,{}为执行的命令块 print命令打印文件内容awk '{print}' datafile -f参数执行awk脚本,如脚本为hello.awkawk -f hello.awk datafile $number表示记录的字段,其中$0表示整个串 FS表示字段分隔符,如下以逗号作为分隔符awk 'BEGIN{FS=

[linux] grep awk sort uniq学习

grep的-A-B-选项详解grep能找出带有关键字的行,但是工作中有时需要找出该行前后的行,下面是解释1. grep -A1 keyword filename找出filename中带有keyword的行,输出中除显示该行外,还显示之后的一行(After 1)2. grep -B1 keyword filename找出filename中带有keyword的行,输出中除显示该行外,还显示之前的一行(Before 1)3. grep -1 keyword filename找出filename中带有k

linux 之awk命令详解

awk是一种程序语言,对文档资料的处理具有很强的功能.awk名称是由它三个最初设计者的姓氏的第一个字母而命名的: Alfred V. Aho.Peter J. We i n b e rg e r.Brian W. Kernighan. awk 最初在1 9 7 7年完成.1985年发表了一个新版本的awk,它的功能比旧版本增强了不少.awk能够用很短的程序对文档里的资料做修改.比较.提取.打印等处理.如 果使用C 或Pascal等语言编写程序完成上述的任务会十分不方便而且很花费时间,所写的程序也

linux shell awk 语法

引用:http://blog.csdn.net/weekly123/article/details/1465675 inux shell awk 语法   Awk 是一种非常好的语言,同时有一个非常奇怪的名称.在本系列(共三篇文章)的第一篇文章中,Daniel Robbins 将使您迅速掌握 awk 编程技巧.随着本系列的进展,将讨论更高级的主题,最后将演示一个真正的高级 awk 演示程序.捍卫 awk在本系列文章中,我将使您成为精通 awk 的编码人员.我承认,awk 并没有一个非常好听且又非

[Linux 操作] awk操作の 打印图片路径

最近需要在Linux上完成一个小操作: 就是把某文件夹下所有图片的路径和对应文件名打印到一个txt文件上,形成一个类似list的东西. 首先,这里需要知道一个命令: awk awk实际上是一个强大的文本分析工具,把文件逐行读入(awk是处理每一行的),以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理. 具体使用方式: awk '{pattern + action}' {filenames} 回到我的问题上来,是这么操作的: 先进入我要处理的文件夹目录, 然后敲入下面的命令: 这里,“T