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. css3简单旋转

    <!DOCTYPE html><html><head> <meta charset="utf-8"> <title>&l ...

  2. subarray sum

    public class Solution { /* * @param nums: A list of integers * @return: A list of integers includes ...

  3. 记录使用 Cake 进行构建并制作 nuget 包

    书接上一回(https://www.cnblogs.com/h82258652/p/4898983.html)?[手动狗头] 前段时间折腾了一下,总算是把我自己的图片缓存控件(https://gith ...

  4. php 从2维数组组合为四维数组分析(项目中前台侧边栏导航三级分类显示)

    foreach函数(循环函数)内嵌套循环函数时,当内层完全循环完后,才会向上一级循环 数组要注意问题 array_merge----合并一个或多个数组 将一个或多个数组的单元合并起来,一个数组中的值附 ...

  5. Scala微服务架构 三

    四 Controller层 之前我们已经把基层架构搭建好了,那么要如何使用呢? 首先看看我的Controller层代码 @Singleton class BMAuthController @Injec ...

  6. Android 页面跳转之生命周期调用顺序问题

    Android Activity 常用技巧 Android Activity 启动模式和任务栈 Android 页面跳转之生命周期调用顺序问题 一.页面跳转逻辑分析 1.1 跳转逻辑分析 Androi ...

  7. 常用 Linux 命令使用说明

    Linux 如果不知道某个命令的意思,通过  "man 命令" 可以查看它的使用方式及详细信息. 操作tomcat用到的相关命令 1.Enter 执行命令 2.Tab 自动补全命令 ...

  8. LabVIEW(十六):多列列表框控件

    1.多列列表框控件:前面板右键>列表.表格和树>多列列表框2.默认情况下只显示列首,可设置显示行首:前面板选中多列列表框右键>显示>行首3.LabVIEW中提供42种自带的图标 ...

  9. Spark SQL读取hive数据时报找不到mysql驱动

    Exception: Caused by: org.datanucleus.exceptions.NucleusException: Attempt to invoke the "BoneC ...

  10. .net core Jenkins持续集成Linux、Docker、K8S

    jenkins插件 系统管理 -> 管理插件,安装如下插件. #如果搜索不到去掉Plugin在搜索 GitLab Plugin Gitlab Hook Plugin #使用Gitlab账号做用户 ...