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

原文地址:https://www.cnblogs.com/laiyaling/p/12809643.html