for
Bashループの出力をソートしようとしています。
現在のループから得られた出力は次のようになります。
Directory: /some/long/directory/path Remote: some-remote
Directory: /some/dir/path Remote: other-remote
次のように並べ替えます。
Directory: /some/long/directory/path Remote: some-remote
Directory: /some/dir/path Remote: other-remote
この出力を生成する現在の基本ループは次のとおりです。
for dir in $(find /some/path -type d -name .git); do
cd $dir
remote=$(git remote)
printf "Directory: $dir\tRemote: $remote\n
done
私は以下を試してみました。
column
(forループなので、各行の形式を個別に指定します)printf
(printf "Directory: %s Remote: %s\n" "$dir" "$remote"
)awk
(echo "Directory: $dir Remote: $remote" | awk '{printf ("%s-20s %s-20s %s-20s %s-20s",$1 $2 $3 $4)}'
)
このコマンドには他の多くのバリエーションがあります。
おそらく基本的なものが欠けているかもしれません(オンラインで他の例を見て、ページを読むことに全力を尽くしましたがman
)うまくいきません。
誰かが私が間違っていることを指摘してくれたら本当に感謝します。
ベストアンサー1
column
うまくいくでしょう。ただし、すべてのループ反復に追加するわけではありませんが、最後に次のものを追加します。
for
...
done | column -t
出力:
Directory: /some/long/directory/path Remote: some-remote
Directory: /some/dir/path Remote: other-remote
スクリプトに関するいくつかの追加注意事項:
find
このように出力を繰り返さないでください。ここで確認してください。- 参照ファイル/ディレクトリ変数 - >
cd "$dir"
printf
FORMAT
文字列に変数を使用しないでください。 -->printf 'Directory: %s\tRemote: %s\n' "$dir" "$remote"