在 AWK 中执行计算
如果 table 元素是数字,awk 可以对它们运行计算,如下例所示:
awk '{ print ( * ) + }'
除了访问当前行元素的变量($1、$2 等)外,还有变量 $0 表示完整的行(行),变量 NF 表示字段的数量。
我们还可以定义新变量,如本例所示:
awk '{ sum=0; for (col=1; col<=NF; col++) sum += $col; print sum; }'
这将计算并打印每行的所有元素的总和。
awk 语句经常与 sed 命令结合使用。
AWK 基础
awk 命令的基本格式如下所示:
awk 'pattern {action}' input-file > output-file
这意味着:取输入文件的每一行;如果该行包含该模式,则将该操作应用于该行并将结果行写入输出文件。
如果省略该模式,则该操作将应用于所有行。
例如:
awk '{ print }' table1.txt > output1.txt
上述语句将每行第5列的元素作为一行写入到输出文件“output.txt”中。
变量“$4”指的是第四列。
类似地,我们可以使用 $1、$2、$3 等访问第一、第二和第三列。
默认情况下,假定列由空格或者制表符(所谓的空格)分隔。
因此,如果输入文件“table1.txt”包含以下几行:
1, Justin Timberlake, Title 545, Price .30 2, Taylor Swift, Title 723, Price .90 3, Mick Jagger, Title 610, Price .90 4, Lady Gaga, Title 118, Price .30 5, Johnny Cash, Title 482, Price .50 6, Elvis Presley, Title 335, Price .30 7, John Lennon, Title 271, Price .90 8, Michael Jackson, Title 373, Price .50
然后该命令会将以下几行写入输出文件“output1.txt”:
545, 723, 610, 118, 482, 335, 271, 373,
如果列分隔符不是空格或者制表符,例如逗号,则可以在 awk 语句中指定如下:
awk -F, '{ print }' table1.txt > output1.txt
如果列被视为由逗号分隔,这将从每行的第 3 列中选择元素。
因此,在这种情况下,输出将是:
Title 545 Title 723 Title 610 Title 118 Title 482 Title 335 Title 271 Title 373
AWK 命令、语法和示例
awk 命令是处理或者分析文本文件的强大方法。
特别是,它分析按行(行)和列组织的数据文件。
可以从命令行运行简单的 awk 命令。
更复杂的任务应该作为 awk 程序(称为 awk 脚本)写入文件。
AWK 中的条件表达式
大括号 ('{','}') 内的语句列表称为块。
如果在块前放置条件表达式,则只有在条件为真时才会执行块内的语句。
awk '=="$7.30" { print }' table1.txt
在这种情况下,条件是 $7=="$7.30",这意味着第 7 列中的元素等于 $7.30。
美元符号前面的反斜杠用于防止系统将 $7 解释为变量,而是按字面意思理解美元符号。
所以这个 awk 语句打印出每行的第 3 列的元素,该元素在第 7 列中具有“$7.30”。
我们还可以使用正则表达式作为条件。
例如:
awk '/30/ { print }' table1.txt
两个斜杠 ('/') 之间的字符串是正则表达式。
在这种情况下,它只是字符串“30”。
这意味着如果一行包含字符串“30”,系统会打印出该行第 3 列的元素。
上面示例中的输出将是:
Timberlake, Gaga, Presley,