以下语法将 output1 打印下来
echo "$status"
Run Code Online (Sandbox Code Playgroud)
输出 1:
component_name : TEZ_CLIENT recovery_enabled : true
component_name : WEBHCAT_SERVER recovery_enabled : true
component_name : YARN_CLIENT recovery_enabled : true
component_name : ZKFC recovery_enabled : true
component_name : ZOOKEEPER_CLIENT recovery_enabled : true
component_name : ZOOKEEPER_SERVER recovery_enabled : true
Run Code Online (Sandbox Code Playgroud)
如何添加 printf 语法以获得以下几行:
预期产出
component_name : TEZ_CLIENT recovery_enabled : true
component_name : WEBHCAT_SERVER recovery_enabled : true
component_name : YARN_CLIENT recovery_enabled : true
component_name : ZKFC recovery_enabled : true
component_name : ZOOKEEPER_CLIENT recovery_enabled : true
component_name : ZOOKEEPER_SERVER recovery_enabled : true
Run Code Online (Sandbox Code Playgroud)
echo "$status" | awk '{printf("%s %s %-20s %20s %s %s\n", $1, $2, $3, $4, $5, $6)}'
Run Code Online (Sandbox Code Playgroud)
会产生
component_name : TEZ_CLIENT recovery_enabled : true
component_name : WEBHCAT_SERVER recovery_enabled : true
component_name : YARN_CLIENT recovery_enabled : true
component_name : ZKFC recovery_enabled : true
component_name : ZOOKEEPER_CLIENT recovery_enabled : true
component_name : ZOOKEEPER_SERVER recovery_enabled : true
Run Code Online (Sandbox Code Playgroud)
该%-20s格式将为左对齐字符串%20s保留 20 个字符,而为右对齐字符串保留 20 个字符。调整20s 以适合您所需的格式。
在这个问题的前世,你不得不使用各种转换sed和滤波用grep。这些很可能也可以在同一个awk脚本中直接从源文件中完成。或者,如果文件是 JSON 文件(如您在评论中所说),则直接jq来自同一个文件。