让我们开始吧。awk是Unix和类Unix系统的一个强大的文本解析工具,但是因为它具有可编程的功能,所以你可以用它来执行常规的解析任务,所以它也被认为是一种编程语言。您可能不会使用awk来开发您的下一个GUI应用程序,它可能不会取代您的默认脚本语言,但它是用于某些任务的强大程序。这些任务可能出奇地多样化。要了解awk可以为您解决哪些问题,最好的方法就是学习awk。您会惊讶于awk如何帮助您事半功倍。awk的基本语法是:awk[options]'pattern{action}'file首先,创建这个示例文件并将其保存为colours.txt。namecoloramountapplered4bananayellow6strawberryred3grapepurple10applegreen8plumpurple2kiwibrown4potatobrown9pineappleyellow5数据由一个或多个空格分隔到列中。以某种方式组织要分析的数据是很常见的。它不一定总是由空格分隔的列,甚至可能不是逗号或分号,但特别是在日志文件或数据转储中,通常有一种可预测的格式。您可以使用数据格式来帮助awk提取和处理您关心的数据。打印列表在awk中,print函数显示您指定的内容。您可以使用许多预定义变量,但最常见的是文本文件中以整数命名的列。试试这个:$awk'{print$2;}'colours.txtcolorredyellowredpurplegreenpurplebrownbrownyellow这里,awk显示第二列,用$2表示。这是相对直观的,因此您可能会猜测print$1显示第一列,print$3显示第三列,依此类推。要显示所有列,请使用$0。美元符号($)后面的数字是表达式,因此$2和$(1+1)表示相同的东西。有条件地选择列您使用的示例文件非常结构化。它有一行充当标题,各列直接相互关联。通过定义条件,您可以限制awk在找到此数据时返回的内容。例如,要查看第二列中与黄色匹配的项并打印第一列的内容:awk'$2=="yellow"{print$1}'file1.txtbananapineapple正则表达式也可以。该表达式近似匹配以p开头后跟任意数字(一个或多个)字符并继续跟在p之后的$2的值:$awk'$2~/p.+p/{print$0}'colours.txtgrapepurple10plum的awk可以自然地解释purple2号。例如,要打印第三列包含大于5的整数的行:awk'$3>5{print$1,$2}'colors.txtnamecolorbananayellowgrapepurpleapplegreenpotatobrown字段分隔符默认情况下,awk使用空格作为字段分隔符。但是,并非所有文本文件都使用空格来定义字段。例如,创建一个名为colours.csv的文件,内容如下:name,color,amountapple,red,4banana,yellow,6strawberry,red,3grape,purple,10apple,green,8plum,purple,2kiwi,br??own,4potato,brown,9pineapple,yellow,5只要在命令中指定使用哪个字符作为字段分隔符,awk就可以用完全相同的方式处理数据。使用--field-separator(或简称-F)选项定义分隔符:$awk-F","'$2=="yellow"{print$1}'file1.csvbananapineapple使用输出重定向保存输出,您可以将结果写入文件。例如:$awk-F,'$3>5{print$1,$2}colours.csv>output.txt这将创建一个包含awk查询内容的文件。您还可以将文件拆分为按列数据分组的多个文件。例如,如果你想根据每行显示的颜色将colours.txt分成多个文件,你可以在awk中包含一个重定向语句来重定向每个查询:$awk'{print>$2".txt"}'colors.txt这将生成名为yellow.txt、red.txt等的文件。
