使用awk打印文件中的字段和列

Awk 自动将提供给它的输入行划分为字段,一个字段可以定义为一组字符,这些字符通过内部字段分隔符与其他字段分开。

如果你熟悉 Unix/Linux 或者做bash shell 编程,那么你应该知道什么是内部字段分隔符 (IFS) 变量是。Awk 中的默认 IFS 是制表符和空格。

Awk: 遇到输入行时,根据定义的IFS,第一组字符为field one,访问时使用 $1,第二组字符是字段二,使用访问 $2,第三组字符是字段三,使用访问 $3 依此类推,直到最后一组字符。

为了更好地理解这个 awk 字段编辑,让我们看看下面的例子:

Example 1: 我创建了一个名为的文本文件 .

  1. > vi rumenzinfo.txt
  2. > cat rumenzinfo.txt
  3. rumenz.com is the nb
  1. > awk '//{print $1 $2 $3 }' rumenzinfo.txt
  2. rumenz.comisthe

从上面的输出中,您可以看到前三个字段中的字符是根据 IFS 定义哪个是空间:

  1. 字段一是 rumenz.com使用$1.
  2. 字段二是 is使用$2.
  3. 第三场是 the使用$3.

如果您在打印输出中注意到,字段值没有分开,这就是打印默认的行为方式。

要在字段值之间使用空格清楚地查看输出,您需要添加(,)运算符,如下所示:

  1. > awk '//{print $1, $2, $3; }' rumenzinfo.txt
  2. rumenz.com is the

需要注意并始终记住的一件重要事情是使用($)inAwk 不同于它在 shell 脚本中的使用。

在 shell 脚本($)中用于访问变量的值,而在Awk ($) 它仅在访问字段内容时使用,而不用于访问变量值。

Example 2: 让我们看一个使用包含多行的文件的另一个例子

  1. > cat my_shoping.list
  2. No Item_Name Unit_Price Quantity Price
  3. 1 Mouse #20,000 1 #20,000
  4. 2 Monitor #500,000 1 #500,000
  5. 3 RAM_Chips #150,000 2 #300,000
  6. 4 Ethernet_Cables #30,000 4 #120,000

假设您只想打印Unit_Price购物清单上的每件商品,您需要运行以下命令:

  1. > awk '//{print $2, $3 }' my_shopping.txt
  2. Item_Name Unit_Price
  3. Mouse #20,000
  4. Monitor #500,000
  5. RAM_Chips #150,000
  6. Ethernet_Cables #30,000

Awk还有一个printf命令可以帮助您格式化输出,这是一个很好的方法,因为您可以看到上面的输出不够清楚。

使用printf格式化的输出Item_NameUnit_Price

  1. > awk '//{printf "%-10s %s\n",$2, $3 }' my_shopping.txt
  2. Item_Name Unit_Price
  3. Mouse #20,000
  4. Monitor #500,000
  5. RAM_Chips #150,000
  6. Ethernet_Cables #30,000

返回笔记列表
入门小站