awk是一个超级强大的文本格式化处理工具,他与grep, sed命令被成为linux 三剑客命令

三剑客命令的特点:

grep:只要用来匹配和查找文本

sed: 编辑匹配到文本

awk: 格式化文本,可以对复杂文本进行处理

awk语法格式:awk [options] 'program' file1 file2 ...

其中,program包含两部分:'pattern{action}',最常用的两个action就是print和printf,如果学过c语言,你就知道,他们专门由于格式化字符串, awk把处理过的格式文本,用他们输出

1,不使用任何选项,模式和action, awk就相当于输出整个文件,awk的工作方式是:逐行扫描. 默认情况下 扫描行的时候,用空格分割列,输出的时候也是空格

使用print这个动作,打印文件所有的内容.

ghostwu@dev:~/linux/sed$ cat ghostwu.txt
this is ghostwu
how are you
fine thank you
bye bye
ghostwu@dev:~/linux/sed$ awk '{print}' ghostwu.txt
this is ghostwu
how are you
fine thank you
bye bye

2,把ls -l 的结果通过管道交给awk逐行扫描处理,$1打印每一行的第一列,$3:每一行的第三列,$9就是第9列了...

ghostwu@dev:~/linux/sed$ ls -l
total
-rw-rw-r-- ghostwu ghostwu 5月 : ghostwu.txt
ghostwu@dev:~/linux/sed$ ls -l | awk '{print $1}'
total
-rw-rw-r--
ghostwu@dev:~/linux/sed$ ls -l | awk '{print $3}' ghostwu
ghostwu@dev:~/linux/sed$ ls -l | awk '{print $9}' ghostwu.txt
ghostwu@dev:~/linux/sed$ cat ghostwu.txt
this is ghostwu
how are you
fine thank you
bye bye
ghostwu@dev:~/linux/sed$ awk '{print $3}' ghostwu.txt
ghostwu
you
you

3,$0表示整行,$NF表示当前行分割后的最后一列,他们都是内置变量

ghostwu@dev:~/linux/sed$ awk '{print $0}' ghostwu.txt
this is ghostwu
how are you
fine thank you
bye bye
ghostwu@dev:~/linux/sed$ awk '{print $NF}' ghostwu.txt
ghostwu
you
you
bye

4,一次列出多列,使用逗号隔开要输出的列

ghostwu@dev:~/linux/sed$ cat ghostwu.txt
this is ghostwu
how are you
fine thank you
bye bye
ghostwu@dev:~/linux/sed$ awk '{print $1, $3}' ghostwu.txt
this ghostwu
how you
fine you
bye

文件最后一行,没有第三列,所以没有输出任何东西

5,也可以加上自定义的列

ghostwu@dev:~/linux/awk$ ls
ghostwu.txt
ghostwu@dev:~/linux/awk$ awk '{print "name:" $1, "age:" $2, "sex:" $3}' ghostwu.txt
name:ghostwu age: sex:man
name:zhangsan age: sex:woman
name:lisi age: sex:woman
ghostwu@dev:~/linux/awk$ cat ghostwu.txt
ghostwu man
zhangsan woman
lisi woman

6,数字前面有美元符号的,是awk的内置变量,不能加引号,否则会把他们当做字符串原样输出

ghostwu@dev:~/linux/awk$ awk '{print "$1"}' ghostwu.txt
$
$
$
ghostwu@dev:~/linux/awk$ awk '{print $1}' ghostwu.txt
ghostwu
zhangsan
lisi
ghostwu@dev:~/linux/awk$ awk '{print "first-cloumn:"$1}' ghostwu.txt
first-cloumn:ghostwu
first-cloumn:zhangsan
first-cloumn:lisi

7,以下两种写法,都表示输出整行

ghostwu@dev:~/linux/awk$ awk '{print $0}' ghostwu.txt
ghostwu man
zhangsan woman
lisi woman
ghostwu@dev:~/linux/awk$ awk '{print}' ghostwu.txt
ghostwu man
zhangsan woman
lisi woman

8,BEGIN模式,在AWK扫描行之前,执行

在扫描行之前,打印aa,bb

ghostwu@dev:~/linux/awk$ awk 'BEGIN{print "aa", "bb"}' ghostwu.txt
aa bb

如果胜省略文件,BEGIN模式依然会执行

ghostwu@dev:~/linux/awk$ awk 'BEGIN{print "aa", "bb"}'
aa bb

BEGIN有什么用?我们可以在扫描文件的行之前,为每个列都加上表头信息

ghostwu@dev:~/linux/awk$ cat ghostwu.txt
ghostwu man
zhangsan woman
lisi woman
ghostwu@dev:~/linux/awk$ awk 'BEGIN{print "name", "age", "sex"} {print $1, $2, $3}' ghostwu.txt
name age sex
ghostwu man
zhangsan woman
lisi woman

9,扫描每一行,在每一行的后面加上自定义的列

ghostwu@dev:~/linux/awk$ awk 'BEGIN{print "name", "age", "sex"} {print $1, $2, $3} {print "展昭", 20, "man"}' ghostwu.txt
name age sex
ghostwu man
展昭 man
zhangsan woman
展昭 man
lisi woman
展昭 man

10, 扫描完所有的行,在加上自己自定义的列信息,可以用END模式

ghostwu@dev:~/linux/awk$ awk 'BEGIN{print "name", "age", "sex"} {print $1, $2, $3} END{print "展昭", 20, "man"}' ghostwu.txt
name age sex
ghostwu man
zhangsan woman
lisi woman
展昭 man

Linux常用基本命令:三剑客命令之-awk基础用法的更多相关文章

  1. Linux常用基本命令:三剑客命令之-sed

    sed是一个很强大的文件处理工具,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作 格式:sed [option] [command] [file] 常用命令: a   ∶新 ...

  2. Linux常用基本命令:三剑客命令之-awk数组用法

    AWK的数组用法跟javascript类似. 1,定义数组 awk 'BEGIN{a[0]="zhangsan";a[1]="lisi";print a[0]} ...

  3. Linux常用基本命令:三剑客命令之-awk动作用法(1)

    1,多个动作,怎么写? ghostwu@dev:~/linux/awk$ cat host.txt name ip地址 host1 192.168.1.1 host2 192.177.81.1 hos ...

  4. Linux常用基本命令:三剑客命令之-awk模式用法(2)

    1,正则模式,在/etc/passwd中 过滤出使用/bin/bash的用户 ghostwu@dev:~/linux/awk$ awk -v FS=":" 'BEGIN{print ...

  5. Linux常用基本命令:三剑客命令之-awk模式用法(1)

    再次回顾一下,awk基本语法格式: awk [options] 'Pattern {Action}' file1 file2 ··· 之前的文章有讲过两种Pattern(BEGIN, END),本文, ...

  6. ## 本篇文章对linux常用的一些命令做一下总结,如有需要补充以及不懂得地方,请在下方留言 适合于linux初学者,以及对命令掌握不牢的用来备忘

    本篇文章对linux常用的一些命令做一下总结,如有需要补充以及不懂得地方,请在下方留言 适合于linux初学者,以及对命令掌握不牢的用来备忘一,磁盘管理1.显示当前目录位置 pwd2.切换目录 cd ...

  7. Linux常用基本命令(less)

    转: Linux常用基本命令(less) LESS:跟more命令的功能类似,都是用于分页显示内容,但是他的性能比more更高,功能比more更丰富,他读取文件是按需加载 格式: less [opti ...

  8. Linux 常用基本命令及应用技巧

    需要pdf 版 联系我 我的文件中有目录一.Linux 的常用基本命令................................................................. ...

  9. Linux中使用sed命令或awk命令修改常规配置文件

    一.方案: Linux中使用sed命令或awk命令修改常规配置文件 二.步骤: 1.假设有一个a.txt,内容如下: #!/bin/bash aa= bbb= ccc= #ddd= 2.如果想要把里面 ...

随机推荐

  1. lucene的suggest(搜索提示功能的实现)

    1.首先引入依赖 <!-- https://mvnrepository.com/artifact/org.apache.lucene/lucene-suggest --> <!-- ...

  2. Python序列结构

    python中常用的序列结构由列表.元组.字典.字符串.集合等,列表.元组.字符串等有序序列以及range对象均支持双向索引 是否有序 序列结构 是否是可变序列 有序序列 元组 不可变序列 有序序列 ...

  3. 使用Python对Twitter进行数据挖掘(Mining Twitter Data with Python)

    目录 1.Collecting data 1.1 Register Your App 1.2 Accessing the Data 1.3 Streaming 2.Text Pre-processin ...

  4. maven理论基础

    Maven介绍 Maven是一个Java项目管理和构建工具 Maven使用pom.xml定义项目内容,并使用预设的目录结构 在Maven中声明一个依赖项可以自动下载并导入classpath Maven ...

  5. 音视频编解码——RGB与YUV格式转换

    一.RGB模型与YUV模型 1.RGB模型 我们知道物理三基色分别是红(Red).绿(Green).蓝(Blue).现代的显示器技术就是通过组合不同强度的红绿蓝三原色,来达成几乎任何一种可见光的颜色. ...

  6. react-router V4中的url参数

    概述 之前写过react在router中传递数据的2种方法,但是有些细节没有理清楚,现在补上,记录下来,供以后开发时参考,相信对其他人也有用. 参考资料:stackoverflow react rou ...

  7. process(进程)

    进程 指的是执行中程序的一个实例(instance). 新进程由fork() 与 execve() 等系统调用起始,然后执行,直到下达exit()系统调用为止. 操作系统内核里,称为调度器(sched ...

  8. HoloLens开发手记 - 使用HoloLens模拟器 Using HoloLens emulator

    首先下载HoloLens模拟器 HoloLens模拟器运行在没有真机的情况下在你的PC上测试应用,属于HoloLens开发工具系列.模拟器使用了Hyper-V虚拟机.通常通过传感器获取的人体和环境输入 ...

  9. Spark 的 Shuffle过程介绍`

    Spark的Shuffle过程介绍 Shuffle Writer Spark丰富了任务类型,有些任务之间数据流转不需要通过Shuffle,但是有些任务之间还是需要通过Shuffle来传递数据,比如wi ...

  10. [转]KMP算法理解及java实现

    这大概是我看的最好懂的KMP算法讲解了,不过我还只弄懂了大概思想,算法实现我到时候用java实现一遍 出处:知乎 https://www.zhihu.com/question/21923021/ans ...