使用awk输出文本中的字段和列的方法

首先我们要知道,awk 能够自动将输入的行,分隔为若干字段。每一个字段就是一组字符,它们和其他的字段由一个内部字段分隔符分隔开来。

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

awk 中的字段分隔符的工作原理如下:当读到一行输入时,将它按照指定的 IFS 分割为不同字段,第一组字符就是字段一,可以通过 $1 来访问,第二组字符就是字段二,可以通过 $2 来访问,第三组字符就是字段三,可以通过 $3 来访问,以此类推,直到最后一组字符。

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

例 1:我创建了一个名为 tecmintinfo.txt 的文本文件。

# vi tecmintinfo.txt

# cat tecmintinfo.txt

在 Linux 上创建一个文件

然后在命令行中,我试着使用下面的命令从文本 tecmintinfo.txt 中输出第一个,第二个,以及第三个字段。

$ awk '//{print $1 $2 $3 }' tecmintinfo.txt

TecMint.comisthe

从上面的输出中你可以看到,前三个字段的字符是以空格为分隔符输出的:

字段一是 “TecMint.com”,可以通过 $1 来访问。 字段二是 “is”,可以通过 $2 来访问。 字段三是 “the”,可以通过 $3 来访问。

如果你注意观察输出的话可以发现,输出的字段值并没有被分隔开,这是 print 函数默认的行为。

为了使输出看得更清楚,输出的字段值之间使用空格分开,你需要添加 (,) 操作符。

$ awk '//{print $1, $2, $3; }' tecmintinfo.txt

TecMint.com is the

需要记住而且非常重要的是,($) 在 awk 和在 shell 脚本中的使用是截然不同的!

在 shell 脚本中,($) 被用来获取变量的值。而在 awk 中,($) 只有在获取字段的值时才会用到,不能用于获取变量的值。

例 2:让我们再看一个例子,用到了一个名为 my_shoping.list 的包含多行的文件。

No Item_Name Unit_Price Quantity Price

1 Mouse #20,000 1 #20,000

2 Monitor #500,000 1 #500,000

3 RAM_Chips #150,000 2 #300,000

4 Ethernet_Cables #30,000 4 #120,000

如果你只想输出购物清单上每一个物品的单价,你只需运行下面的命令:

$ awk '//{print $2, $3 }' my_shopping.txt

Item_Name Unit_Price

Mouse #20,000

Monitor #500,000

RAM_Chips #150,000

Ethernet_Cables #30,000

可以看到上面的输出不够清晰,awk 还有一个 printf 的命令,可以帮助你将输出格式化。

使用 printf 来格式化 Item_Name 和 Unit_Price 的输出:

$ awk '//{printf "%-10s %s/n",$2, $3 }' my_shopping.txt

Item_Name Unit_Price

Mouse #20,000

Monitor #500,000

RAM_Chips #150,000

Ethernet_Cables #30,000

总结

使用 awk 过滤文本或字符串时,字段编辑的功能是非常重要的。它能够帮助你从一个表的数据中得到特定的列。一定要记住的是,awk 中 ($) 操作符的用法与其在 shell 脚本中的用法是不同的!

(0)

相关推荐

  • WPS表格中同时冻结行和列的方法

    Wps是一款多功能软件,在文字编辑等方面都有很大的作用,现在有很多朋友都在使用这个软件,但是还是有一些新手对这个软件不是特别熟悉,今天的这篇就和大家聊一聊关于WPS表格中同时冻结行和列的方法的问题,希 ...

  • Linux下删除大数据文件中部分字段重复行的方法

    最近写的一个数据采集程序生成了一个含有1千多万行数据的文件,数据由4个字段组成,按照要求需要删除第二个字段重复的行,找来找去linux下也没找到合适的工具,sed/gawk等流处理工具只能针对一行一行 ...

  • excel中批量插入行和列的方法

    在使用excel工作时想批量插入行和列怎么办?下面教大家用“宏”命令快速为Excel表格批量插入多列行。 操作步骤 1、打开Excel表格,按“Alt+F11”打开“Microsoft Visual ...

  • 快速删除excel中的空行和列的方法

    用户在网上下载好的Excel表格打开之后发现有很多空白行,怎么样将这些空白行或单元格一次性删除掉呢?下面教大家在Excel中用定位一次性可以把空白行删除。 操作步骤 1、打开Excel表格看到试图中有 ...

  • Excel2010中固定首行首列的方法

    ①启动Excel2010,单击视图--窗口标签下的冻结窗格按钮。 ②我们要演示的是冻结首行,那么在下拉菜单中选择冻结首行即可。 ③冻结完毕,拖动下拉滚动条,可以清清楚楚的看到首行并没有变动。

  • UNIX(freebsd)如何对文本中的文字

    文本中的文字排序演示 登录终端执行“sort 文件全名”并确定。 unix文本文字排序sort命令参数 sort命令参数 执行结果 -d telephone book(电话簿)排序法进行排序。该选项在 ...

  • Word利用替换将文本中所有的数字都去掉

    本例主要介绍利用替换的方法把Word文本中所有的数字都去掉,操作很简单,很适合新手来学习,推荐过来,一起来学习吧. 操作步骤说明: Word文本正文中数字和文本掺杂,需要将其中的所有数字去掉. 按键盘 ...

  • 如何在Access数据表中设置字段的数据类型

    在这里介绍Access数据表中设置字段的数据类型的方法,希望本指南能帮到大家. 操作方法 01 以下图数据表为例演示设置方法. 02 鼠标移到菜单栏这里,点击"字段"菜单. 03 ...

  • 如何在Word表格中插入行或列的几种方法图解教程

    在制作表格的实际操作过程中,难免会遇到由于创建表格时未充分考虑,而需要向表格中插入/删除行或列的情况,例如在word2003表格的最右边一列的右侧插入一列作为“备注”列。下面介绍几种在创建好的表格中插 ...