在awk脚本中正确使用变量

时间:2012-05-25 10:34:10

标签: variables awk

我有一个包含许多行的文件,如下所示:

 one     3456    orange
 two     6690    grape
 three   5570    apple
 four    6683    pear
 five    8847    cherry
 six     9035    banana

所以我写了一个awk脚本来捕获这个输出:

apple banana cherry

看起来像这样:

awk '/three/ { a = $3}; /six/ { b = $3}; /five/ { c = $3} END {print  a" " b" "c}' <file

但这看起来并不是最好的方法,因为我一直在使用$3 - 如何捕获此变量以重用它?

1 个答案:

答案 0 :(得分:2)

按照你的方式做这件事并没有什么特别的错误。如果使用变量,则必须重复。但是,您可以使用数组来累积值。

以下是使用简单变量的示例:

awk '{var = $3} /three/ {a = var}; /six/ {b = var}; /five/ {c = var} END {print a, b, c}' file

以下是使用数组的示例:

awk '$1 ~ /^(three|six|five)$/ {arr[++c] = $3} END {for (i = 1; i <= c; i++) {printf "%s%s", delim, arr[i]; delim = OFS}; printf "\n"}' file

您不需要使用重定向。 AWK可以接受文件名作为参数。

print语句中,逗号替换OFS的值(默认为空格),因此您无需使用" "

在阵列版本中,您可以轻松更改正则表达式,因为它们都在一个地方。