在我们的这部分 ,我们将看看awk的,这是场编辑的最重要的特征之一。
这是好事,知道awk中自动将提供给它的成字段输入线和字段可以定义为一组从其他领域由内部字段分隔分隔的字符。
Awk打印字段和列
如果你熟悉Unix / Linux操作系统或做 ,那么你应该知道什么内部字段分隔符(IFS)变量。 Awk中的默认IFS是制表符和空格。
这是场分离的想法如何在awk的工作原理:当它遇到的输入线,根据规定的IFS,第一个字符集是字段中的一个,这是使用$ 1端口接入,第二个字符集是第二场,这使用$ 2访问,第三个字符集是第三场,这是使用$ 3浏览等等,直到最后一组字符(县)的。
要更好地理解这个Awk字段编辑,让我们看看下面的例子:
例1:我已经创建了一个名为youclinfo.txt的文本文件。
# vi youclinfo.txt # cat youclinfo.txt
在Linux中创建文件
然后,在命令行中,我尝试打印从文件中第一 , 第二和第三个字段youclinfo.txt使用下面的命令:
$ awk '//{print $1 $2 $3 }' youclinfo.txt youcl.comisthe
从上面的输出,你可以看到,从第一三个字段中的字符是基于定义的IFS是空间印花:
- 一个字段是“youcl.com”使用访问
$1
。 - 第二场是“就是”是使用访问
$2
。 - 第三场是“的”使用访问
$3
。
如果您在打印输出中注意到,字段值不分隔,这是默认情况下打印的行为。
为了与现场值之间的空间清晰的查看输出,你需要添加(,)
如下运营商:
$ awk '//{print $1, $2, $3; }' youclinfo.txt youcl.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
假设你想只打印Unit_Price
购物清单上的每一个项目,你将需要运行以下命令:
$ 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脚本的不同。
我希望这篇文章对您有帮助,并且任何其他信息需要或问题,您可以在评论部分发表评论。