4

ビルドでアクティブ化したすべてのモジュールを一覧表示する「MODULES」という名前の変数を持つこのMakefileがあります。

このリストはスペースで区切られているので、次のようになりますecho $(MODULES)

module1 module2 module3 module4 mod5 mod6 mod7 module8 module9

私がやりたいのは、コンパイル時に表示されるいくつかの列にこのリストを表示することです。

このような:

Modules activated:
module1 module2 module3 
module4 mod5    mod6 
mod7    module8 module9

理想的には、列withは、列内の最大のモジュールの幅に調整されます(を参照mod7)。列の数は、現在の端子の幅に応じて調整されます。

さて、 columnのように、それを実行しているように見えるUNIXユーティリティをいくつか見つけましたが、自分のセットでは機能させることができません。

私にそれをさせるトリックがありますか?

編集

以下で選択した答えで、私はついにMakefileでこのコマンドを解読しました。

@printf '%s\n' $(MODULES) | sort | column
4

4 に答える 4

5
printf '%-12s%-12s%s\n' $modules

これは、プレースホルダーがフォーマット文字列に表示される回数だけ変数の内容を消費し、すべての内容が消費されるまで繰り返されます。

columnユーティリティは自動的に列を生成します。

column <<< "$(printf '%s\n' $module)"

それはコラムファーストです。行優先が必要な場合:

column -x <<< "$(printf '%s\n' $module)"
于 2012-05-21T14:21:15.213 に答える
2

この質問の答えを使用して、次のようなことを試してください。

echo "Modules activated:"
for item in $modules; do 
    printf "%-8s\n" "${item}"
done | column

-x出力を転置したい場合は、columnコマンドに追加する可能性があります。

これは、列の数に関して端末に依存する必要があります。

于 2012-05-21T14:27:06.577 に答える
1

columnと整列fold

echo $modules | column -t | fold | column -t
于 2012-05-21T14:39:54.427 に答える
0

折りたたみとタブを使用して、大まかなフォーマットを取得できます。

echo "module1 module2 module3 module4 mod5 mod6 mod7 module8 module9" | sed 's/ /\t/g' | fold -s -18module1 module2 
module3 module4 
mod5    mod6    
mod7    module8 
module9

ただし、一部のモジュール名が8文字より長く、一部が短い場合は正しく機能しません。

于 2012-05-21T14:35:00.170 に答える