Unix/Linux 中的 AWK 命令及示例


AWK

Unix/Linux 中的 AWK 命令及示例

AWK简介

Awk 是一种用于处理数据和生成报告的脚本语言。awk 命令编程语言不需要编译,并允许用户使用变量、数字函数、字符串函数和逻辑运算符。

Awk 是一种实用程序,它使程序员能够以语句的形式编写小巧但有效的程序,这些语句定义要在文档的每一行中搜索的文本模式以及在行中找到匹配项时要采取的操作。Awk 主要用于模式扫描和处理。它搜索一个或多个文件以查看它们是否包含与指定模式匹配的行,然后执行相关操作。

句法

awk options 'selection _criteria {action }' input-file > output-file

Options:

-f program-file : Reads the AWK program source from the file 
                  program-file, instead of from the 
                  first command line argument.
-F fs            : Use fs for the input field separator

Awk命令示例

考虑以下文本文件作为以下所有情况的输入文件:

$cat > employee.txt 
ajay manager account 45000
sunil clerk account 25000
varun manager sales 50000
amit manager account 47000
tarun peon sales 15000
deepak clerk sales 23000
sunil peon sales 13000
satvik director purchase 80000 
  1. Awk 的默认行为:默认情况下,Awk 打印指定文件中的每一行数据。
$ awk '{print}' employee.txt

ajay manager account 45000
sunil clerk account 25000
varun manager sales 50000
amit manager account 47000
tarun peon sales 15000
deepak clerk sales 23000
sunil peon sales 13000
satvik director purchase 80000 

在上面的例子中,没有给出模式。因此这些操作适用于所有行。不带任何参数的打印操作默认打印整行,因此它会打印文件的所有行而不会失败。

  1. 打印与给定模式匹配的行。
$ awk '/manager/ {print}' employee.txt 
ajay manager account 45000
varun manager sales 50000
amit manager account 47000 

在上面的示例中,awk 命令打印与“manager”匹配的所有行。

  1. 将一行拆分为字段:对于每条记录(即行),awk 命令默认会以空格字符分隔记录并将其存储在 $n 变量中。如果该行有 4 个单词,则分别存储在 $1、$2、$3 和 $4 中。另外,$0 代表整行。
$ awk -F' ' '{print $1,$4}' employee.txt 
ajay 45000
sunil 25000
varun 50000
amit 47000
tarun 15000
deepak 23000
sunil 13000
satvik 80000 

在上面的示例中,$1 和 $4 分别代表“Name”和“Salary”字段。

awk 中的内置变量

awk 的内置变量包括字段变量 $1、$2、$3 等($0 表示整行)——它们将一行文本分成单独的单词或片段,称为字段。

  • NR:NR 命令保存当前输入记录的数量。请记住,记录通常是行。Awk 命令对文件中的每个记录执行一次模式/操作语句。
  • NF:NF 命令保存当前输入记录中的字段数。
  • FS:FS 命令包含用于在输入行上划分字段的字段分隔符。默认值为“空白”,即空格和制表符。可以将 FS 重新分配给另一个字符(通常在 BEGIN 中)以更改字段分隔符。
  • RS:RS 命令存储当前记录分隔符。由于默认情况下,输入行是输入记录,因此默认记录分隔符是换行符。
  • OFS:OFS 命令存储输出字段分隔符,当 Awk 打印字段时,它会分隔字段。默认值为空格。每当 print 有多个用逗号分隔的参数时,它都会在每个参数之间打印 OFS 的值。
  • ORS:ORS 命令存储输出记录分隔符,Awk 打印输出行时,它会分隔输出行。默认为换行符。print 会自动将 ORS 的内容输出到打印内容的末尾。

示例

  1. 使用 NR 内置变量(显示行号)
$ awk '{print NR,$0}' employee.txt 
1 ajay manager account 45000
2 sunil clerk account 25000
3 varun manager sales 50000
4 amit manager account 47000
5 tarun peon sales 15000
6 deepak clerk sales 23000
7 sunil peon sales 13000
8 satvik director purchase 80000 

在上面的示例中,带有 NR 的 awk 命令打印所有行以及行号。

  1. 使用 NF 内置变量(显示最后一个字段)
$ awk '{print $1,$NF}' employee.txt 
ajay 45000
sunil 25000
varun 50000
amit 47000
tarun 15000
deepak 23000
sunil 13000
satvik 80000 

在上面的示例中, 1 代表姓名, 1 代表姓名, 1代表姓名,NF 代表薪水。我们可以使用 $NF 获取薪资,其中 $NF 代表最后一个字段。

  1. NR内置变量的另一种用途(显示行从3到6
$ awk 'NR==3, NR==6 {print NR,$0}' employee.txt 
3 varun manager sales 50000
4 amit manager account 47000
5 tarun peon sales 15000
6 deepak clerk sales 23000 

作者博客: https://chamferschen.github.io/
转载: https://www.geeksforgeeks.org/awk-command-unixlinux-examples/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值