Linux awk命令常见使用方法介绍

By:授客 QQ:1033553122

 

awk运行方式有三种,其中常用的为命令行方式

awk [-F  field_separator]  '{pattern + action}'  input_file(s)

其中,其中 pattern 表示awk需要查找的内容,由符号//包围,形如 /^shouke/,而 action 是在找到匹配内容时所执行的一系列命令,[-F field_separator]可选,input-file(s) 是待处理的文件。

通常,awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令来处理文本。

在awk中,文件的每一行中,由域分隔符(field_separator,默认为空格)分开的每一项称为一个域。

[root@localhost ~]# touch testfile

[root@localhost ~]# vim testfile

id   name         sex      addr        hobby

1    name:shouke  sex:男   addr:深圳   hobby:music

2    name:laiyu   sex:女   addr:云南   hobby:none

例子1:不指定分割符,从文件读取数据(awk '{action}'  input_file(s)

[root@localhost ~]# awk '{print $1, $2}' testfile

id name

1 name:shouke

2 name:laiyu

说明:awk工作流程是这样的:读入由换行符'\n'分割的一条记录,然后将记录按指定的域分隔符划分域,填充域($0则表示所有域,$1表示第一个域,$n表示第n个域),接着读取下一条记录,重复前面的操作。默认域分隔符是"空白键" 或 "tab键"

例子2:指定分隔符,从文件读取数据(awk -F  field_separator '{action}'  input_file(s)

[root@localhost ~]# awk -F ':' '{print $1, $2}' testfile

id   name         sex      addr        hobby

1    name shouke  sex

2    name laiyu   sex

例子3:从命令输出结果读取数据

[root@localhost ~]# cat testfile | awk '{print $2, $3}'

name sex

name:shouke sex:男

name:laiyu sex:女

例子4:格式化输出

[root@localhost ~]# cat testfile | awk '{print $2"\t"$3}'

name    sex

name:shouke sex:男

name:laiyu  sex:女

例子5: 指定初始操作和结尾操作

[root@localhost ~]# cat testfile | awk 'BEGIN {print "first"} {print $2,$3} END {print "finally"}'

first

name sex

name:shouke sex:男

name:laiyu sex:女

finally

例子6:指定pattern模式(awk [-F  field_separator]  '{pattern}'  input_file(s)

[root@localhost ~]# cat testfile | awk '/laiyu/'

2    name:laiyu   sex:女   addr:云南   hobby:none

说明:

1.例子为搜索文件中所有包含pattern即字符串“laiyu”的行记录,仅匹配了pattern(例中为laiyu)的行才会执行action(这里没有指定action,默认输出每行的内容)。

2.搜索支持正则,例如找laiyu开头的: cat testfile | awk '/^laiyu/'

例7:指定pattern+action模式(awk [-F  field_separator]  '{pattern+action}'  input_file(s) [root@localhost ~]# cat testfile | awk '/laiyu/{print $2, $3}'

name:laiyu sex:女

例8:printf格式化输出

[root@localhost home]# cat testfile | awk '{print $2}' | awk -F ':' '{printf("newname:%5s, oldname:%5s\n", $2, $2)}'

newname:     , oldname:

newname:shouke, oldname:shouke

newname:laiyu, oldname:laiyu

newname:     , oldname:

例9:自定义变量

[root@localhost home]# cat testfile | awk 'BEGIN {num=0;}{num=num+1;} END{print "rows of record have been read is: " num}'

rows of record have been read is: 4

说明:例中自定义了一个变量:num,初始值为0。action{}中可以有多条语句,每条以;号隔开。

例10:使用内置变量

[root@localhost home]# cat testfile | awk '{print "rows of record have been read is: " NR}'

rows of record have been read is: 1

rows of record have been read is: 2

rows of record have been read is: 3

rows of record have been read is: 4

说明:处理$0等变量,awk还有其它内置变量,比如 NR--读取的记录数,FILENAME--awk浏览的文件名

除此之外,action {}中还可使用循环语句,判断语句等

Linux awk命令常见使用方法介绍的更多相关文章

  1. linux awk命令详细使用方法

    简单介绍 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部 ...

  2. linux service命令常见使用方法

    service命令,顾名思义,就是用于管理Linux操作系统中服务的命令. 1. 声明:这个命令不是在所有的linux发行版本中都有.主要是在redhat.fedora.mandriva和centos ...

  3. linux awk命令详解

    linux awk命令详解 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分 ...

  4. linux awk命令详解,使用system来内嵌系统命令, awk合并两列

    linux awk命令详解 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分 ...

  5. Linux awk命令 --三剑客老大

    Linux awk命令 --三剑客老大 基本用法: awk  [参数]  ['找谁{干啥}']  文件 参数: -F 分隔符 -v 创建或修改awk变量 OFS 输出分割符 awk显示每一列的时候分隔 ...

  6. Linux awk命令使用方法

    awk是linux上非常好用的文本处理工具,常用于指定列的处理,包括获取指定列的内容.根据指定列匹配关系输出等文本处理.本文主要描述awk命令的基本语法.正则表达式与操作符的使用.常用内置变量的含义和 ...

  7. 详述Linux ftp命令的使用方法

    转自:http://os.51cto.com/art/201003/186325.htm ftp服务器在网上较为常见,Linux ftp命令的功能是用命令的方式来控制在本地机和远程机之间传送文件,这里 ...

  8. Linux awk命令详解??????????(研究)

    http://blog.chinaunix.net/uid-25120309-id-3801250.html 一.  AWK 说明  awk是一种编程语言,用于在linux/unix下对文本和数据进行 ...

  9. Linux ftp命令的使用方法 -- 转

    http://jingyan.baidu.com/article/066074d68b6a7ac3c21cb038.html FTP(File Transfer Protocol, FTP)是TCP/ ...

随机推荐

  1. vue教程3-05 vue组件数据传递、父子组件数据获取,slot,router路由

    vue教程3-05 vue组件数据传递 一.vue默认情况下,子组件也没法访问父组件数据 <!DOCTYPE html> <html lang="en"> ...

  2. CentOS安装与配置Powerline插件

    Powerline powerline 可用于美化终端和vim编辑器的插件,它是Python开发的,为多个应用(bash,zsh,tmux等)提供statusline. 下面我们在CentOS上为vi ...

  3. c3p0配置文件

    配置文件 名称必须为c3p0-config.xml,否则找不到: 标签名称 <c3p0-config> <default-config > 具体配置内容 </defaul ...

  4. Java中的日志管理

    日志是应用程序运行中不可缺少的一部分,JAVA中有很多已经成熟的方案,尽管记录日志是应用开发中并不可少的功能,在 JDK 的最初版本中并不包含日志记录相关的 API 和实现.相关的 API(java. ...

  5. android app性能优化大汇总

    这里根据网络上各位大神已经总结的知识内容做一个大汇总,作为记录,方便后续“温故知新”. 性能指标: (1)使用流畅度:  图片处理器每秒刷新的帧数(FPS),可用来指示页面是否平滑的渲染.高的帧率可以 ...

  6. js便签笔记(10) - 分享:json.js源码解读笔记

    1. 如何理解“json” 首先应该意识到,json是一种数据转换格式,既然是个“格式”,就是个抽象的东西.它不是js对象,也不是字符串,它只是一种格式,一种规定而已. 这个格式规定了如何将js对象转 ...

  7. scala-04-set操作

    Scala Set(集合)是没有重复的对象集合,所有的元素都是唯一的. Scala 集合分为可变的和不可变的集合. 默认情况下,Scala 使用的是不可变集合,如果你想使用可变集合,需要引用 scal ...

  8. 常用的Maven 插件

    Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成. 例如编译源代码是由maven- compiler-plugin完成的.进一步说,每个任务对应了一个插 ...

  9. elasticSearch6源码分析(11)client

    1.RestClient /** * Client that connects to an Elasticsearch cluster through HTTP. * <p> * Must ...

  10. JS pop push unshift shift的作用与区别

    白话JS中数组方法pop push unshift shift的作用与区别,通过本文,你大概能知道这四种数组方法的基本使用与大致区别. 首先,这四种方法会直接修改数组,请先记住这一点. 我们先把pop ...