Awk是一个功能强大的文本处理工具,可以有效地操作和从文件中提取信息,特别是处理结构化数据,例如日志文件、CSV文件等。
此外,Awk其最通用的功能之一是能够根据预定义的分隔符从文件中打印特定字段和列。
在本文中,小编将介绍如何利用Awk打印字段和列,并提供实际示例和解释来证明其有效性。
在Awk中,“字段”指的是行中的特定文本段,由预定义的分隔符(例如空格、制表符或逗号)分隔。每个段都分配有一个字段号,第一个字段是$1,第二个字段是$2,依此类推。
类似地,“列”表示跨多行的字段的垂直分组。通过利用Awk的功能,我们可以有选择地打印或操作这些字段和列,以从数据中提取有价值的信息。
值得注意的是,Awk会自动将提供给它的输入行划分为字段,并且字段可以定义为通过内部字段分隔符与其他字段分隔的一组字符。
如果你熟悉Unix/Linux或进行bash shell编程,那么应该知道内部字段分隔符(IFS)变量是什么。Awk中默认的IFS是制表符和空格。
为了更好地理解Awk字段编辑,让我们看看下面的示例,以帮助你更好的了解。
使用awk打印文件中的字段
要使用Awk打印文件中的特定字段,可以使用“ print ”语句以及所需的字段变量。例如,要打印以逗号分隔的文件的第一个、第二个和第三个字段,可以使用以下命令:
awk '{print $1 "," $2 "," $3}' tecmintinfo.txt
在上面的命令中,可以看到前三个字段的字符是根据定义的IFS(空格)打印的:
- 第一个字段“TecMint”是使用
$1
访问的。 - 第二个字段“is”是使用
$2
访问的。 - 第三个字段“the”是使用
$3
访问的。
需要注意并始终记住的一件重要事情是,在Awk中的使用($)
与在shell脚本中的使用不同。
在shell脚本中,($)
用于访问变量的值,而在awk中,($)
仅在访问字段的内容时使用,而不用于访问变量的值。
使用awk打印文件中的列
要打印文件中的整列,可以使用类似的方法,在“print”语句中指定所需的字段。然而,这一次小编考虑多条行来共同表示列。
例如,要打印文件的第二列和第三列,可以使用以下命令:
awk '//{print $2, $3 }' my_shopping.txt
awk还有一个printf
命令可以帮助你格式化输出,这是一个很好的方法,因为你可以看到上面的输出不够清晰。
使用printf
格式化Item_Name和Unit_Price的输出:
awk '//{printf "%-10s %s\n",$2, $3 }' my_shopping.txt
使用awk打印文件中的字段和列范围
awk还允许我们使用":"
运算符定义字段或列的范围。例如,要从文件中打印字段2和4,可以使用以下命令:
awk '{print $2 ":" $4}' filename
总结
当使用awk过滤文本或字符串时,字段编辑非常重要,它可以帮助你获取列表中列中的特定数据。并且永远记住, Awk中($)运算符的使用与shell脚本中的不同。