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

  • 相关阅读:
    codeforces 980A Links and Pearls
    zoj 3640 Help Me Escape
    sgu 495 Kids and Prizes
    poj 3071 Football
    hdu 3853 LOOPS
    hdu 4035 Maze
    hdu 4405 Aeroplane chess
    poj 2096 Collecting Bugs
    scu 4444 Travel
    zoj 3870 Team Formation
  • 原文地址:https://www.cnblogs.com/laiyaling/p/12809643.html
Copyright © 2011-2022 走看看