Linux日常之命令awk

参考:http://www.zsythink.net/archives/tag/awk/

一. 命令awk简介

    1. awk是一种编程语言,用于对文本和数据进行处理的

    2. 具有强大的文本格式化能力

    3. 利用命令awk,可以将一些文本整理成为我们想要的样子

    4. 命令awk是逐行进行处理的

二. grep、sed、awk的简单比较

    1. 命令grep,更适合单纯的查找或匹配文本

    2. 命令sed,更适合对匹配到的文本进行编辑

    3. 命令awk,更适合文本格式化,对文本进行较复杂的格式处理

三. 命令awk基本语法

    awk [options] 'pattern{action}' file

   1. 在没有options和pattern的情况下,使用命令awk

    

    2. pattern包括两种特殊模式,分别是BEGIN和END

    (1)BEGIN模式,是指命令在处理文本之前执行

    

    (2)END模式,是指命令在处理文本之后执行

    (3)BEGIN模式和END模式同时存在时,其中,BEGIN与END之间的{}相当于一个循环体,对文件中的每一行进行处理

    

  3. 常用的参数

    (1)-F,用于指定输入分隔符

    

    (2)-v,用于设置变量的值

    

    

      从文件中输入变量

    

四. 变量

  awk中的变量分为内置变量和自定义变量两种

  1. 内置变量

FS 输入字段分隔符,默认为空白字符
OFS 输出字段分隔符,默认为空白字符
RS 输入记录分隔符(输入换行符),指定输入时的换行符
ORS 输出记录分隔符(输出换行符),指定输出时的换行符
NF 当前行的字段数(当前行被分隔符分割成了几段)
NR 当前行的行号
FNR 不同文件分别计数
FILENAME 当前文件名
ARGV 数组,保存的是命令行所给定的各参数
ARGC ARGC数组的个数

    

  (1)FS:以“:”为字段输入分隔符,输出第1列和第2列

      1)使用-F选项指定输入分隔符

    

      2)使用内置变量FS指定输入分隔符,需要注意的是,使用变量时,要使用-v选项来指定对应的变量

    

    (2)OFS:以“#”为字段输出分隔符,输出第1列和第2列

    

    (3)RS:以“:”为行输入分隔符,输出对应的行号和当前行内容。

      需要注意的是,两个红框中的内容,由于Jack和DEF、Alice和GHI之间没有“:”,所以在awk中被认作为同一行

    

    (4)ORS:以“---”为行输出分隔符

    

    (5)NF:当前行的字段数

      其中,$NF表示的是最后一个字段的内容,$(NF-1)表示的是倒数第二个字段的内容

    (6)NR:当前行号

    (7)FNR:不同文件分别计数

    

    (8)FILENAME:显示当前行的文件名

    

    (9)ARGV:数组,保存的是命令行所给定的各参数

    

    (10)ARGC:保存的是ARGV数组的个数

    

  2. 自定义变量

    (1)使用-v来自定义变量(在上第三节已介绍)

    (2)在awk中直接定义

    

   

五. 格式化中,awk使用printf时需要注意的问题

  1. 使用printf输出的文本不会换行,如果需要换行,可以在对应的“格式替换符”后加入“\n”进行转义

  2. 使用printf输出时,“指定的格式”与“被格式化的文本”之间,要用“,”隔开

  3. 使用printf输出时,“格式”中的“格式替换符”必须与“被格式化的文本”一一对应(个数要相同)

六. awk中的pattern模式

  当awk进行逐行处理时,会把pattern作为条件,判断当前行是否满足条件,若跟pattern匹配,则进行后面的处理,否则,跳过当前行。

  

  1. 正则表达式

    awk下的正则表达式与grep下的区别:

    1)awk下:   awk '/正则表达式/{print}' /etc/passwd

    2)grep下:  grep "正则表达式" /etc/passwd

    

    需要注意的是 

      1)在awk的正则表达式中,若出现"/",则需要进行转义,在其前面加"\"

      2)当使用{x,y}类型次数匹配的正则表达式时,需要使用--posix选项或--re-interval选项

  2. 行范围匹配

    awk '/正则表达式1/,/正则表达式2/{action}' file

    表示的是,从被正则表达式1匹配到的行开始,到被正则表达式2匹配到的行结束,之间所有的行都会执行对应的动作。

七. 关系运算符

关系运算符 含义 用法实例
< 小于 x<y
<= 小于等于 x<=y
> 大于 x>y
>= 大于等于 x>=y
== 等于 x==y
!= 不等于 x!=y
~ 匹配 x~/正则表达式/
!~ 不匹配 x!~/正则表达式/

八. 条件判断

1
2
3
4
5
6
if(表达式)
    {语句1}
else if(表达式)
    {语句2}
else
    {语句3}

  实例

1
2
3
4
5
6
7
8
9
10
11
12
awk 'BEGIN{
    test=100;
    if(test>90){
         print "very good";
    }
    else if(test>60){
        print "good";
    }
    else{
       print "no pass";
    }
}'

  

九. 循环语句

  1. while循环语句

1
2
while(表达式)
    {语句}

  实例

1
2
3
4
5
6
7
8
9
awk 'BEGIN{
    test=100;
    total=0;
    while(i<=test){
        total+=i;
        i++; 
    }        
    print total;             
}'

  2. for循环语句

    1)第一种

1
2
for(变量 in 数组)
    {语句}

    2)第二种

1
2
for(变量;条件;表达式)
    {语句}

  3. do循环语句

1
2
3
do
    {语句}
while(条件)

  

posted on 2017-12-01 18:41 一个不会coding的girl 阅读(3314) 评论(0) 编辑 收藏

发表评论

昵称:

评论内容:





不改了
退出
订阅评论

[Ctrl+Enter快捷键提交]

Powered by:

博客园


Copyright © 一个不会coding的girl

一个不会coding的girl Linux日常之命令awk的更多相关文章

  1. Linux日常之命令awk

    参考:http://www.zsythink.net/archives/tag/awk/ 一. 命令awk简介 1. awk是一种编程语言,用于对文本和数据进行处理的 2. 具有强大的文本格式化能力 ...

  2. 10 程序员必备:Linux日常维护命令

    一.服务器硬件配置 1.查看硬盘及分区情况 # fdisk -l 2.查看分区空间使用情况 可以查看各分区大小.已使用.可用.已使用百分比.挂载情况 1)默认单位为K # df 2)可读性更好的显示, ...

  3. Linux日常维护命令

    对于程序员来说,掌握一些基本的Linux命令是必不可少的,即使现在用不到,在不久的将来也应该会用到.由于Linux有很多命令,每个命令基本可以用一篇文章介绍,所以本文仅总结一些常用命令的常用用法,如有 ...

  4. Linux日常使用命令

    pwd  当前目录的路径ls -a 显示隐藏文件ls -l h*  显示所有以h开头的文件ls -d  b*  显示所有以b开头的文件夹ls -l  *.log  所有后缀是.log 的文件dir 显 ...

  5. Linux 日常维护命令

    1   防火墙配置 1)重启后生效  开启: chkconfig iptables on  关闭: chkconfig iptables off 或者 /sbin/chkconfig --level  ...

  6. Linux日常之命令sort

    素材借鉴:https://www.cnblogs.com/51linux/archive/2012/05/23/2515299.html 命令sort 是Linux中常用的排序命令,属于管道命令. 常 ...

  7. Linux日常之命令sed

    一. 命令sed简介 利用命令sed能够同时处理多个文件多行的内容,可以不对原文件改动,仅把匹配的内容显示在屏幕上,也可以对原文件进行改动,但是不会在屏幕上返回结果,若想查看改动后的文件,可以使用命令 ...

  8. Linux日常之命令grep

    命令grep简介 利用该命令在文本中查找指定的字符串,是Linux中最常用的文本处理工具之一. 命令grep与正则表达式结合使用时,功能会非常强大. 命令grep会在文本文件中按照指定的正则表达式进行 ...

  9. linux 日常使用命令

    ●安装和登录命令:login.shutdown.halt.reboot.mount.umount.chsh ●文件处理命令:file.mkdir.grep.dd.find.mv.ls.diff.cat ...

随机推荐

  1. CentOS 7 下挂载NTFS盘及开机自动挂载

    一.工具 NTFS-3G 二.安装2种安装方式 2.1.yum安装 yum install NTFS* 2.2.编译安装 下载 解压 wget https://tuxera.com/opensourc ...

  2. 主库增加表空间导致DG同步失败

    由于主库表空间不足,同事给表空间增加数据文件,第二天收到反馈说备库未同步. 1.主.备查看归档序列号,发现主.备归档正常同步. SQL>archive log list 2.在主库端查询v$ar ...

  3. mpvue 小程序 使用wx.request请求数据

    1.创建src下创建utils/wx-request.js const host = 'http://10.0.0.6:8081' function request (url, method, dat ...

  4. if (flag)

    var flag = false;//暂停标记if (flag){ alert("aa")}else { alert("bb")}bb if (flag) = ...

  5. 截取字符,超出的用省略号代替js实现 substring

    可用到截取文字过多的问题,取0到6之间的字符,不包含6title.substring(0,6)+'...';

  6. it兼职以及行业门户网

    程序员接私活的七大平台 https://www.jianshu.com/p/61a3fabe75fc 1.程序员客栈:程序员的经纪人 https://www.proginn.com/     2.快码 ...

  7. 动手实现CapsNet系列——1 概述

    Geoffrey Hinton是深度学习的开创者之一,反向传播等神经网络经典算法发明人,他在17年年底和他的团队发表了两篇论文,介绍了一种全新的神经网络,这种网络基于一种称为胶囊(Capsule)的结 ...

  8. VIM - EX 命令 - 文件读写

    VIM - EX 命令 - 文件读写 1. 概述 vim 通过 ex 命令行, 与其他文件的读写操作 2. 场景 场景1 vim 打开文本 将当前文本的内容, 写入到其他文本 场景2 vim 打开文本 ...

  9. python之nosetest

    nose介绍 nose下载 nose使用 -s 能够打印用例中的print信息 ➜ func_tests git:(master) ✗ nosetests -v test_app.py:TestApp ...

  10. python面向对象封装案例2

    封装 封装 是面向对象编程的一大特点 面向对象编程的 第一步 —— 将 属性 和 方法 封装 到一个抽象的 类 中 外界 使用 类 创建 对象,然后 让对象调用方法 对象方法的细节 都被 封装 在 类 ...