首页 > 解决方案 > AWK:使用字段分隔符连接匹配模式

问题描述

输入文件:

cat /tmp/filename

app_name="MysqlCluster"
whatever whatever
whatever whatever
whatever whatever
whatever whatever
region="Europe"

预期输出:

MysqlCluster_Europe

尝试:

root@localhost:~# awk -F\" '/app_name|region/ {printf "%s_", $2}' /tmp/filename
MysqlCluster_Europe_root@localhost:~# 

root@localhost:~# awk -F\" '/app_name|region/ {OFS="_"; printf "%s", $2}' /tmp/filename
MysqlClusterEuroperoot@localhost:~#

root@localhost:~# awk -F\" '/app_name|region/ {printf "%s_", $2} END{print} ' /tmp/filename
MysqlCluster_Europe_

And few other attempts on similar lines but have not been successful.

我在寻找:

root@localhost:~# awk <here goes some awk magic> /tmp/filename
MysqlCluster_Europe    <<< NOTE: No Underscore at the end

标签: linuxbashawksed

解决方案


以下将适用于您的示例。(虽然它不会打印换行符。)

awk -F\" '/^(app_name|region)/ { printf "%s%s", s, $2; s="_" }' /tmp/filename

根本不减少您的工作量,但处理app_nameregion两个单独的操作会更实用 imo,这样它也将支持多个 app_name-region 对。

awk -F\" '/^app_name/ { printf "%s_", $2 } /^region/ { print $2 }' /tmp/filename

推荐阅读