シェル「for」ループで生成された出力を列でソートする方法

シェル「for」ループで生成された出力を列でソートする方法

forBashループの出力をソートしようとしています。

現在のループから得られた出力は次のようになります。

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"

おすすめ記事