zoukankan      html  css  js  c++  java
  • Linux三大文本处理工具之awk

    AWK也是一个很强大的文本处理工具,与grep, sed 一起称为linux文本处理的“三板斧”。

    • grep更适合单纯的查找和匹配文本
    • sed适合编辑匹配的文本
    • awk适合格式化文本,倾向于把一行文本分成多个‘字段’来进行复杂的格式化操作。

    如图,awk是逐行处理文本,将一行内容按照指定分隔符将行分割为多个字段,其中分割完后第一个字段为:$1,第二个为$2$0表示当前处理的整行。
    除此之外,awk还有一些特殊的内置变量:

    • NF ,表示每一行($0)有的字段总数,(注:$NFNF不一样,$NF指的是当前行的最后一个字段)
    • NR ,表示当前处理的是第几行
    • FS ,表示目前的分隔符,默认是空格

    1.语法

    awk [option] 'partten1 {action1}; partten2 {action2}'

    匹配条件和动作 ['partten1 {action1}']
    partten表示匹配的条件,action 表示对符合条件的内容进行的操作,常用动作有printf,用于格式化输出。
    注意:

    • partten和action外要用单引号''括起来,action要用花括号{}括起来,
    • 单引号内如果有字符串,必须使用双引号""括起来。

    常用参数 [option]

    • -F 指定分隔符 ,如 awk -F, '{print $1,$2}'
    • -v 定义变量 ,如 awk -va=1,'{print $a+1}'
    • -f 从脚本中读取awk命令

    2.实例

    (1) 无匹配条件

    1. 每行按空格分割,输出第1列和第3列
    • awk '{print $1,$3}'
      注:多个变量之间用逗号,隔开。
    1. 每行按逗号分割,输出第1列和第3列
    • awk -F, '{print $1,$3}'
    1. 加上变量的格式化输出
    • awk -va=1, '{print $1+a,$3}'

    (2) 有匹配条件

    1. 指定分隔符,且输出第3列<10的第一列和第三列字段,并用空格隔开。
    • awk '{FS=":"} $3 < 10 {print $1 " " $3}'
    1. 带有计算的命令
    • awk 'NR==1{pintf $1,$2,"total"};NR>=2{total = $1+$2 print $1,$2,total}'
      注:
      多个命令可用分号;间隔或者使用换行[ENTER]键隔开。
      变量可以直接使用,不需要加$
    1. 带有BEGIN和END两种模式的
      BEGIN 表示指定处理文本之前需要执行的操作。
      END 表示指定处理本文之后需要指定的操作。
      比如,在打印某个文件前先打印'aaa,bbb'
    • awk 'BEGIN{print "aaa","bbb"}{print $1,$2}' file.txt

    参考链接:https://www.runoob.com/linux/linux-comm-awk.html

  • 相关阅读:
    集合的代数运算
    集合的代数运算
    poj1639 Picnic Planning,K度限制生成树
    C/C++学习站点资源
    Mustache 使用心得总结
    PostgreSQL服务端监听设置及client连接方法
    【线性规划与网络流24题】汽车加油行驶问题 分层图
    linux系统下信号具体解释2
    【数据结构】栈-数组的实现
    EJB究竟是什么,真的那么神奇吗??
  • 原文地址:https://www.cnblogs.com/laiyaling/p/12809643.html
Copyright © 2011-2022 走看看