awk指令操作详解

  1. 记录与字段

    awk一次从文件中读取一条记录,并将记录存储在字段变量$0中。记录被分隔为字段比功能存储在$1,$2,...$NF中,(默认使用空格或指标符为分隔符)。内建参数NF为记录的字段数。

    #输出demo.txt 文件的第1个,第2个,第3个,第4个字段

    awk ‘{print $1,$2,$3,$4}‘ demo.txt

    #输出demo.txt 文件整行记录

    awk ‘{print $0}‘ demo.txt

    #输出demo.txt 该行的字段个数。

    awk ‘{print NF}‘ demo.txt

    #输出demo.txt 该行的字段个数。

    awk ‘{print $NF}‘ demo.txt

  2. 字段分隔符

    awk默认读取数据以空格或指标符为分隔符,但可以通过-F或FS(field separator)变量来改变更个符。

    awk -F: ‘{print $1}‘ /etc/passwd
    awk ‘BEGIN {FS = ":"} {print $1}‘ /etc/passwd

    echo ‘hello the:world,!‘ |awk ‘BEGIN{FS="[:, ]"} {print $1,$2,$3,$4}‘

  3. 内置变量                            描述

    ARGC                                命令行参数个数

    FILENAME                         当前输入文件的名称

    FNR                                   当前输入文档的当前记录编号,尤其是当有多个输入文档时有用

    NR                                     输入流的当前输入记录编号

    NF                                     当前记录的字段个数

    FS                                     字段分隔符

    OFS                                   输出字段分隔符,默认为空格

    ORS                                   输出记录分隔符,默认我为换行符\n

    RS                                     输入记录分隔符,默认我为换行符\n

    cat test1.txt

    This is a test file.
    Welcome to Jacob‘s Class.

    cat test2.txt

    Hello the world.
    Wow, I‘m overwhelmed.
    Ask for more.

    #输出当前文档的当前行号

    awk ‘{print FNR}‘ test1.txt test2.txt

    #将两个文档当做一个整体的输入流,通过NR输入当前行号

    awk ‘{print NR}‘ test1.txt test2.txt

    #输出每一行当前的字段数

    awk ‘{print NF}‘ test1.txt

    #内置变量FS字段分隔符

    awk ‘BEGIN{FS="[:]"} {print $1}‘ /etc/passwd

    #输出字段伏案分隔符

    awk ‘BEGIN{OFS="-"}{print $1,$2,$3}‘ test1.txt

    cat test.txt

    name=lianjie
    age=26
    Tel=18219995524

    name=ccc
    age=20
    Tel=13899246656

    name=alex
    age=25
    Tel=19812345623

    awk  ‘BEGIN{FS="\n";RS=""}{print $1,$2,$3,$4}‘ test.txt
    name=lianjie age=26 Tel=18219995524
    name=ccc age=20 Tel=13899246656
    name=alex age=25 Tel=19812345623

    awk ‘BEGIN{FS="\n";RS=""}{print $1}‘ test.txt

  4. 表达式与操作符

    操作符

    +   加

    -    减

    *    乘

    /     除

    %   求余

    ^    幂运算

    ++ 自增1

    --    自减1

    +=    (x+=9等价于x=x+9)

    -=     (x-=9等价于x=x-9)

    *=     (x*=9等价于x=x*9)

    /=     (x/=9等价于x=x/9)

    >    大于

    <    小于

    >=  大于等于

    <=   小于等于

    !=    不等于

    ~    匹配

    !~    不配

    &&    与

    ||     或

    echo ‘test‘ | awk ‘x=2 {print x+3}‘

    echo ‘test‘ | awk ‘x=2,y=3 {print x*3,y*3}‘

    awk ‘/^$/ {print x+=1}‘ test.txt                     #统计所有的空白行

    awk ‘/^$/ {x+=1}END{print x}‘ test.txt         #打印总空白行的行个数

    awk -F: ‘$1~/root/ {print $7}‘ /etc/passwd

    awk -F: ‘$3>500 {print $1}‘ /etc/passwd

awk指令操作详解

时间: 2024-08-26 17:00:39

awk指令操作详解的相关文章

DNS基本概念及操作详解----------------转载

DNS基本概念及操作详解 目录: 1.DNS协议 2.DNS查询 2.1递归查询 2.2跌代查询 2.3反向查询 3.域维护 3.1全量AXFR传输 3.2增量IXFR传输 3.3通过NOTIFY 3.4动态更新 4.DNS安全 在很多人看来,DNS只是为外部提供DNS解析服务(我以前也是这么认为的,直到膝盖中了一箭),但作为互联网的基础设施,DNS远没有想象的那么简单.如果你没有听说过DNS查询.反向解析.zone传输.动态更新.DNS安全,那你可以从本文中得到关于他们的最简明的诠释. 一.

[Android新手区] SQLite 操作详解--SQL语法

该文章完全摘自转自:北大青鸟[Android新手区] SQLite 操作详解--SQL语法  :http://home.bdqn.cn/thread-49363-1-1.html SQLite库可以解析大部分标准SQL语言.但它也省去了一些特性并且加入了一些自己的新特性.这篇文档就是试图描述那些SQLite支持/不支持的SQL语法的.查看关键字列表. 如下语法表格中,纯文本用蓝色粗体显示.非终极符号为斜体红色.作为语法一部分的运算符用黑色Roman字体表示. 这篇文档只是对SQLite实现的SQ

cut\grep\awk\sed命令详解

cut\grep\awk\sed命令详解 1.cut命令详解及实例 (1)作用:提取文件中指定的列 语法格式:cut  选项  文件名   (2)选项作用:      -d 分隔符     按照指定的分割符进行分割      -f 列号       指定提取第几列      -c 字符范围  不依赖分割符来分割,而是通过字符范围进行字段提取      -b 字节数     以字节为单位进行分割.    (3)cut实际应用案例. 例1:cut的-d和-f选项的使用,列出/etc/passwd里面

IA-32指令解析详解

IA-32指令解析详解 0x00 前言 这段时间忙于考试,信息论和最优化,还有算法分析,有点让人头大.期间花了几天看SEH机制,能明白个大概,但是对于VC++对于SHE的包装似乎还是不是很明白,发现逆向工程核心原理对于这段写的太简单,至于加密与解密则是模棱两可,软件加密技术内幕倒是详解了,可是太老了,代码又是汇编写的总是编译不通过.真是让人难受!本来想写一篇SEH详解,但是基于以上原因暂时搁置.这两天看了逆向核心原理关于IA-32指令解析的内容,发现还是挺有意思,遂记录下来. 0x01 何谓IA

Windows DIB文件操作详解-4.使用DIB Section

前面讲了为了提高DIB的显示性能和效率,我们将DIB转换成DDB,但是这又遇到一个问题,如果我想操作DIB的数据的话,显然是不能使用DDB:一是因为DIB转DDB时发生了颜色转换,再就是DDB无法直接提取指定像素点的数据.那么我们怎么办呢,Windows使用一种折中的方式来达到这一目标(既提高了显示效率和性能,又可以直接操作像素点). 1.DIB Section存储和显示 Windows使用DIB块(DIB Section)来存储DIB数据,其内存结构示意图如下 其实,和我们自己读入DIB数据到

Linq实战 之 DataSet操作详解

Linq实战 之 DataSet操作详解  一:linq to Ado.Net 1. linq为什么要扩展ado.net,原因在于给既有代码增加福利.FCL中在ado.net上扩展了一些方法. 简单一点的说: 就是在DatTable 和 DataRow 上面做了一些扩展. 二:扩展方法一览 1. AsEnumerable 2. Field 三:扩展类一览 DataTableExtensions 扩展 => public static EnumerableRowCollection<DataRo

Python对Excel操作详解

  Python对Excel操作详解 文档摘要: 本文档主要介绍如何通过python对office excel进行读写操作,使用了xlrd.xlwt和xlutils模块.另外还演示了如何通过Tcl  tcom包对excel操作. 关键字: Python.Excel.xlrd.xlwt.xlutils.TCl.tcom     1 Python简介 Python是一种面向对象.直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定.它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务.

Yii 框架里数据库操作详解-[增加、查询、更新、删除的方法 &#39;AR模式&#39;]

public function getMinLimit () {        $sql = "...";        $result = yii::app()->db->createCommand($sql);        $query = $result->queryAll();         return array (                $query [0] ['max'],         );    } $connection=Yii::

Linq实战 之 Linq to Sql及Entity Framework操作详解

Linq实战 之 Linq to Sql及Entity Framework操作详解 一:linq to db的框架 1. linq to sql 2. linq to ado.net entity framework linq to sql是一个团队 ef 是一个团队... linq to sql => ef 团队. linq to sql 适合一些小型的项目 => sqlserver ef 适合中形的项目,而且可以支持 sqllite,mysql,sqlserver 掌柜的项目开发中:使用的