如果您想以真正可怕的单行方式执行 awk,但又想让 awk 更接近函数式编程范式语法,而不必跟踪最后一次出现的时间
mawk/mawk2/gawk 'BEGIN { FS = "=7713[0-9]+="; RS = "^$";
} END { print ar0[split($(0 * sub(/\n.+$/,"",$NF)), ar0, ORS)] }'
这里我使用了多个 awk 简写:
sub(/[\n.+$/, "", $NF) # trimming all extra rows after pattern
g/sub() 返回替换的数量,因此将其乘以 0 会强制将 split() 拆分为完整文件 $0。
split() 返回数组中的项目数(这是表示最后一个元素位置的另一种方式),所以即使我已经修剪掉了尾随的\n,我仍然可以直接打印ar0[split()] ,知道 ORS 将填充缺少的尾随 \n。
这就是为什么这段代码看起来像是我试图在定义数组本身之前提取数组项,但由于需要逻辑流程,数组将在它到达时被定义打印。
现在,如果您想要更简单的东西,这两个也可以工作
mawk/gawk 'BEGIN { FS="=7713[0-9]+="; RS = "^$"
} END { $NF = substr($NF, 1, index($NF, ORS));
FS = ORS; $0 = $0; print $(NF-1) }'
或
mawk/gawk '/=7713[0-9]+=/ { lst = $0 } END { print lst }'
- 我没有使用与 OP 相同的
x|c 要求来展示这些工作,无论您需要固定字符串还是基于正则表达式的匹配。