printfを使用してフィールドをソートする方法

printfを使用してフィールドをソートする方法

次の構文は出力1を出力します。

echo "$status" 

出力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

次の行を取得するために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

ベストアンサー1

echo "$status" | awk '{printf("%s %s %-20s %20s %s %s\n", $1, $2, $3, $4, $5, $6)}'

生産します

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

この%-20s形式は、左揃え文字列に対して20文字を予約し、右揃え%20s文字列に対して20文字を予約します。20希望のフォーマットに合わせてsを調整します。


この質問の以前のバージョンでは、をsed使用してフィルタリングしてさまざまな変換を実行しましたgrep。これはawk同じスクリプトのソースファイルから直接行うこともできます。または、ファイルがJSONファイルの場合(コメントで述べたように)、jq同じファイルから直接。

おすすめ記事