用户登录
用户注册

分享至

awk的基本使用方法

  • 作者: 0无知的鱼0
  • 来源: 51数据库
  • 2022-09-21
导读

awk是处理文本文件的一个应用程序,几乎所有 Linux 系统都自带这个程序。

它依次处理文件的每一行,并读取里面的每一个字段。对于日志、CSV 那样的每行格式相同的文本文件,awk可能是最方便的工具。

awk其实不仅仅是工具软件,还是一种编程语言。不过,本文只介绍它的命令行用法,对于大多数场合,应该足够用了。

一、基本用法

awk的基本用法就是下面的形式。

#?格式
$?awk?动作?文件名

#?示例
$?awk?'{print?$0}'?demo.txt

上面示例中,demo.txt是awk所要处理的文本文件。前面单引号内部有一个大括号,里面就是每一行的处理动作print $0。其中,print是打印命令,$0代表当前行,因此上面命令的执行结果,就是把每一行原样打印出来。

下面,我们先用标准输入(stdin)演示上面这个例子。

$?echo?'this?is?a?test'?|?awk?'{print?$0}'
this?is?a?test

上面代码中,print $0就是把标准输入this is a test,重新打印了一遍。

awk会根据空格和制表符,将每一行分成若干字段,依次用$1、$2、$3代表第一个字段、第二个字段、第三个字段等等。

>$?echo?'this?is?a?test'?|?awk?'{print?$3}'
a

上面代码中,$3代表this is a test的第三个字段a。

下面,为了便于举例,我们把/etc/passwd文件保存成demo.txt。

>root:x:0:0:root:/root:/usr/bin/zsh
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync

这个文件的字段分隔符是冒号(:),所以要用-F参数指定分隔符为冒号。然后,才能提取到它的第一个字段。

>$?awk?-F?':'?'{?print?$1?}'?demo.txt
root
daemon
bin
sys
sync
二、变量

除了$ + 数字表示某个字段,awk还提供其他一些变量。

变量NF表示当前行有多少个字段,因此$NF就代表最后一个字段。

>$?echo?'this?is?a?test'?|?awk?'{print?$NF}'
test

$(NF-1)代表倒数第二个字段。

>$?awk?-F?':'?'{print?$1,?$(NF-1)}'?demo.txt
root?/root
daemon?/usr/sbin
bin?/bin
sys?/dev
sync?/bin

上面代码中,print命令里面的逗号,表示输出的时候,两个部分之间使用空格分隔。

变量NR表示当前处理的是第几行。

 >$?awk?-F?':'?'{print?NR?")?"?$1}'?demo.txt
?root
?daemon
?bin
?sys
?sync

上面代码中,print命令里面,如果原样输出字符,要放在双引号里面。

awk的其他内置变量如下。

软件
前端设计
程序设计
Java相关