1

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

 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- 我如何捕获这个变量以重用它?

4

1 回答 1

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(默认为空格)的值,因此您不需要使用" ".

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

于 2012-05-25T11:06:43.470 回答