ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Blog.041 Shell 编程 awk 命令详解

2021-08-05 12:34:16  阅读:143  来源: 互联网

标签:文件 Shell Blog.041 命令 awk 分隔符 文本 getline


本章目录

 

 

 

 

1. awk 命令概述
  1.1 awk 常见用法
  1.2 awk 工作原理
  1.3 awk 命令格式
2. 用法实例
  2.1 按行输出文本
  2.2 按字段输出文本
  2.3 通过管道符号和双引号调用shell命令
  2.4 组合使用

 

 

 

 

1. awk 命令概述

    在 Linux/UNIX 系统中,awk 是一个功能强大的编辑工具,逐行读取输入文本,并根据指定的匹配模式进行查找,对符合条件的内容进行格式化输出或者过滤处理,可以在无交互的情况下实现相当复杂的文本操作,被广泛应用于 Shell 脚本,完成各种自动化配置任务。


  1.1 awk 常见用法

 

    sed 命令常用于一整行的处理,而 awk 比较倾向于将一行分成多个“字段”然后再进行处理,且默认情况下字段的分隔符为空格或 tab 键。

    awk 执行结果可以通过 print 的功能将字段数据打印显示。

    在使用 awk 命令的过程中,可以使用逻辑操作符:

  • “&&”表示“与”;
  • “||” 表示“或”;
  • “!”表示“非”。

    还可以进行简单的数学运算:

  • 如 +、-、*、/、%、^分别表示加、减、乘、除、取余和乘方。


  1.2 awk 工作原理

 

    awk 借用 shell 中类似于位置变量的方法, 用 $1、$2、$3… 顺序地表示行(记录)中的不同字段。
    另外 awk 用 $0 表示整个行(记录)。
    不同的字段之间是通过指定的字符分隔。
    awk 默认的分隔符是空格。
    awk 允许在命令行中用 “-F 分隔符” 的形式来指定分隔符。

 


  1.3 awk 命令格式

 

    命令行格式:

  • awk 选项 '模式或条件 {编辑指令}' 文件 1 文件 2 …

    #过滤并输出文件中符合条件的内容

  • awk -f 脚本文件 文件 1 文件 2 …

    #从脚本中调用编辑指令,过滤并输出内容

 

    awk 包含几个特殊的内建变量(可直接用)如下所示:

 

FS 指定每行文本的字段分隔符,默认为空格或制表位。
NF 当前处理的行的字段个数。
NR 当前处理的行的行号(序数)。
$0 当前处理的行的整行内容。
$n 当前处理行的第 n 个字段(第 n 列)。
FILENAME 被处理的文件名。
RS

“行“分割符,awk从文件上读取资料时,将根据RS的定义把资料切割成许多条记录; 
wak一次仅读入一条记录,以进行处理,预设值是” \n “


2. 用法实例

 


  2.1 按行输出文本

 

 

 

 

 

 


  2.2 按字段输出文本

 

 

 

 

 

 

 

  2.3 通过管道符号和双引号调用shell命令

 

 

 

  • 当 getline 左右无重定向符和或时,getline 作用于当前文件,读入当前文件的第一行给其后跟着的变量 var 或 $0,由于 awk 在处理 getline 之前已经读入了一行,所以 getline 得到的返回结果是隔行的;
  • 当 getline 左右有重定向符和或时,getline 则作用于定向输入文件,由于该文件是刚打开的,并没有被 AWK 读过,只是 getline 读入,那么 geiline 返回的是该文件的第一行,而不是隔一行。

 


  2.4 组合使用

 

 

 

 

 

 

 

 

-

 

标签:文件,Shell,Blog.041,命令,awk,分隔符,文本,getline
来源: https://www.cnblogs.com/cityfell/p/15097049.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有