我有一个包含许多行的文件,如下所示:
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
- 如何捕获此变量以重用它?
答案 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
的值(默认为空格),因此您无需使用" "
。
在阵列版本中,您可以轻松更改正则表达式,因为它们都在一个地方。