1. 命令awk简介

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

b.具有强大得文本格式话能力

c.利用命令awk,可以将一些文本整理成需要的格式。

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

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

a. grep适合单纯的查找或者匹配文本

b. sed  适合匹配到的文本进行编辑

c. awk适合文本格式化,对文本进行比较复杂的格式处理

3. awk基本语法

  awk [options] 'program ' file1,file2

对于上述语法中的program来说,可以细分未pattern和action,也就是说,wak的基本语法如下:

awk [options] 'pattern {action}' file action是指动作,awk擅长文本格式化,并且将格式化以后的文本输出。所以awk最常用的动作就是print和printf,因为awk要把格式化完成后的文本输出,所以常用。

例子1: 不使用[options] 也不指定pattern,直接使用action

例子2:不使用options 和 pattern,输出df信息的 第5列信息,$5表示将当前行按照分隔符分割后的第5列,不指定分隔符时,默认使用空格作为分隔符

例子3:$0表示整行,$NF表示当前分割后的最后一行 ($0和$NF均为内置变量)

注意:$NF表示分割后最后一个字段 ; NF表示当前行被分隔符切开后,一共几个字段。

a. 取最后一个列的数据

b. df命令被分割后,分割成6列, NF=6, 取倒数第二列数据

例子4:可以添加字段,将字段与文件中的列结合起来

例子5:AWK包含2种特殊的模式:

BEGIN 和 END BEGIN 表示指定的动作 需要在处理指定的文本(print $1,$2)之前执行。

END 表示在处理完所有指定的文本后,需要指定动作。

 awk 分隔符

awk默认的分隔符是空格,这样描述并不精确,因为awk的分隔符还分两种,“输入分隔符” 和 “输出分隔符”。

输入分隔符,简称FS, 默认是空白字符,awk默认以空白字符为分隔符,对每一行进行分割。

输出分隔符,简称OFS,awk将每行分割后,输出在屏幕上,以什么字符作为分隔符,awk默认的输出分隔符也是空格。

例子1:

输入分隔符:当awk逐行处理文本时,以输入的分隔符为准,将文本切成多个片段,默认用空格。若一段文字中没有空格,可以指定以特定的文字或符号作为输入分隔符。

指定使用 #作为输入分隔符。

例子2:不管是通过-F选项,还是通过FS内置变量,目的都是设置指定的输入分隔符

输出分隔符:当要对处理完的文本进行输出的时候,以什么文本或者符合作为分隔符。

当awk输出每一列的时候,会使用空格隔开每一列,其实,这个空格,就是awk的默认输出分隔符。

通过内置变量OFS设定awk的输出分隔符,使用变量时需要配合-v选项。

a. 先通过输入分隔符FS='#'进行分割

b.再通过输出分隔符OFS='++++',对#分割后的结果进行处理

扩展:

 awk 变量

常用内置变量:

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

内置变量NR:

NR:表示每一行的行号;NF:表示每一行中一共有几列

注意:在awk中,只要引用$0,$1,$2等内置变量时才使用$,引用其他变量时,不管是内置变量,还是自定义变量,都不用$,直接使用变量名。

其他内置变量参考:http://www.zsythink.net/archives/1374

自定义变量:

第一种方法: 通过-v 设置变量 myvar="testvar"

第二种方法: 直接在program中定义即可,注意: 变量定义与动作之间需要用 分号隔开 ; 

第三种:

 awk格式化

print动作,处理文本时,默认换行

printf动作,处理文本时,不会换行,默认将文本输出在一行里面

awk在printf动作使用时需要注意:

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

2.使用 printf 动作时,“指定的格式” 与 “被格式化的文本”之间,需要用 逗号隔开。

3. 使用 printf 动作时,“格式”中的“格式替换符” 必须与 “被格式化的文本” 一一对应。

例子如下:

先使用awk对文本进行切割,再使用printf动作负责格式文本

 awk 模式(条件)

下列条件,都使用了关系表达式,比如 ==, <= ,> 等,当经过关系运算得出的结果为真时,则满足条件,会执行相应的动作。

给定一个文本文件file.txt,请只打印这个文件中的第10行。 (多种解法)

解法1:

解法2:

解法3:

#!/bin/bash
count=`cat file.txt |wc -l`
out=`cat file.txt |head - |tail -l`
if [$count -lt ]
then
echo ""
else echo $out
fi

awk支持以下关系运算符。

awk的模式还有其他方式:

1. 空模式,没有指定任何“模式”的情况

2. 关系运算模式

3. BEGIN/END模式

未完待续~~~

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

awk基础命令的更多相关文章

  1. awk基础 [马哥视频]

    awk基础 1.1 print print的使用格式: print item1,item2, …. 要点: 各项目自己使用逗号隔开,而输出时则以空白字符分隔: 输出的item可以为字符串或者数值,当前 ...

  2. awk程序设计语言之-awk基础

    awk程序设计语言之-awk基础 http://man.linuxde.net/ 常用工具命令之awk命令 awk是一种编程语言,用于在Linux/Unix下对文本和数据处理.数据可以来自标准输入(s ...

  3. Linux最常用的基础命令

    Linux最常用的基础命令个人总结 计算机基础知识: 32bit和64bit系统的区别.系统运行机制 32bit=内存的最大寻址空间是2**32,也就是说最大只能使用4GB的内存64bit=内存的最大 ...

  4. Centos 03 基础命令

    切换目录 cd ~ 切换到当前用户的家目录 cd - 切换到上一次的目录 上传与下载 支持包在Dial-up Networking Support选项里,没有装可以通过 1.yum install l ...

  5. Linux基础命令-文件与目录

    Linux基础命令-文件与目录 参考:<鸟哥linux私房菜>五-七章,17/12/5复习,18/01/15复习 文件权限 rwx421:用户,用户组,其他 umask查看默认权限:000 ...

  6. Linux最常用的基础命令 上篇

    Linux最常用的基础命令个人总结 计算机基础知识 32bit和64bit系统的区别.系统运行机制 1989年python 诞生 C语言是编译型的语言,不太支持跨平台 Django 江购 32bit= ...

  7. [转帖]linux常用命令大全(linux基础命令入门到精通+实例讲解+持续更新+命令备忘录+面试复习)

    linux常用命令大全(linux基础命令入门到精通+实例讲解+持续更新+命令备忘录+面试复习) https://www.cnblogs.com/caozy/p/9261224.html 总结的挺好的 ...

  8. Linux基础命令小结(超全!!)

    Linux目录结构 1.bin 存放经常使用的指令比如ll,cp 2.sbin 系统管理员使用的系统管理指令 3.home 存放普通用户的住目录 4.root 系统管理员的用户主目录 5.boot 存 ...

  9. 学习 git基础命令

    缘起 年后到了新公司,由于个人意愿到了一个海外的项目组,除了自己从Java技术栈转了C#技术栈外,很多技术都是第一次使用,学习压力不小啊. 自己也就先从常用的技术开始学起,比如C#,AngularJS ...

随机推荐

  1. GDI+ 怎样将图片绘制成圆形的图片

    大概意思就是不生成新的图片,而是将图片转换为圆形图片. 实现代码例如以下: private Image CutEllipse(Image img, Rectangle rec, Size size) ...

  2. SM系列国密算法(转)

    原文地址:科普一下SM系列国密算法(从零开始学区块链 189) 众所周知,为了保障商用密码的安全性,国家商用密码管理办公室制定了一系列密码标准,包括SM1(SCB2).SM2.SM3.SM4.SM7. ...

  3. Spring的@Required注解

    该@Required注解适用于bean属性setter方法,并表示受影响的bean属性必须在XML配置文件在配置时进行填充.否则,容器会抛出一个BeanInitializationException异 ...

  4. 2015小米暑期实习笔试题_风口的猪-中国牛市(dp)

    风口之下.猪都能飞.当今中国股市牛市,真可谓"错过等七年". 给你一个回想历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示,数组中第i个元素(prices[i] ...

  5. js实现拉伸拖动iframe的具体代码

    这篇文章介绍了js实现拉伸拖动iframe的具体代码,有需要的朋友可以参考一下左边iframe放树目录,右边的iframe放index页.拖鼠标同时控制2个iframe的宽高.期待有人能改进.操作方法 ...

  6. 【Android】第21章 2D图形和动画

    分类:C#.Android.VS2015: 创建日期:2016-03-19 一.简介 Android系统定义了一系列独立的图形处理类,其中,2D图形处理类分别位于以下命名空间: Android.Gra ...

  7. C++11 容器Array

    array是一个固定大小的顺序容器,不能动态改变大小,array内的元素在内存中以严格的线性顺序存储与普通数组声明存储空间大小[]的方式是一样有效的,只是加入了一些成员函数和全局函数[get (arr ...

  8. 某人在企业中遇到的Spark问题记录[持续更新]

    https://github.com/ssg-7max/ssg 目前 ssg内公司内部 spark streaming 处理数据源是kafka 目前遇到最大的问题是,会延迟,例如我们配置1分钟让窗口计 ...

  9. c#读excel 不用office组件

    某日笔者写了个导入导出excel的小程序,拿给别人用时,别人说程序有问题读不了. 究其原因发现原来是using Microsoft.Office.Interop.Excel;引用出错.发现他装的off ...

  10. angularjs获取元素以及angular.element()用法

    addClass()-为每个匹配的元素添加指定的样式类名 after()-在匹配元素集合中的每个元素后面插入参数所指定的内容,作为其兄弟节点 append()-在每个匹配元素里面的末尾处插入参数内容 ...