このような非列入力をどのように開くことができますかls
?
ls
最適化されたテーブルは、行ごとに最小幅で作成されます。例:
ls
2 dsao file with space with
5 e g wsdl-rubo-6cb0f1a9086e80c
d file leading space
ただし、出力を(たとえば、1行の各ファイル)入力すると、各行はcolumn
同じ幅で埋められるため、画面の幅に収まります。
for i in *; do echo "$i"; done | column
2 file with space
5 g
d leading space
dsao with
e wsdl-rubo-6cb0f1a9086e80c
file
(ここでは、例と同じ出力を生成するためにファイルのリストを使用しています。最終的に他の項目を一覧表示するためにこのような解決策を探しています。)
可変列幅を使用して出力を列列として表示するには?
答え1
この質問をしてくれた@rubo77に感謝します。素晴らしい練習になります。私にとって、これは英語が悪いスピードを示すのとほぼ同じ間違いをすることです。ここのアルゴリズム自体は非常に簡単であるにもかかわらず、面白いと高速です。
[最終編集:次に移動しましたhttps://github.com/jthill/columnate/blob/master/columnate、バグ修正と行優先順位の実装。 ]
答え2
出力に近いものls
:
for i in *; do echo -en "${i}\t"; done; echo
答え3
上記の@jthillソリューションのように、行ごとに最小幅を使用しませんが、注意することもあります。
autogen
問題を完全に解決するコマンドをインストールしましたhomebrew
。columns
- 溝を取り付けます:https://brew.sh/
brew install autogen
試験用
spit() { for i ; do echo "$i"; done; }
spit 1 2222222222222222 3 4 5 6 7777777777777777 8 $(seq 10 30) | columns
出力:
1 2222222222222222 3 4
5 6 7777777777777777 8
10 11 12 13
14 15 16 17
18 19 20 21
22 23 24 25
26 27 28 29
注:aptパッケージで十分です。
apt install autogen
答え4
一時フォルダを作成し、列ではなく入力の各文字列項目に対して空のファイルを作成し、列の出力に使用できますls
。
例:
mkdir -p /tmp/col
IFS=''
echo "something_very_long-something_very_long-something_very_long
output with space
space-at-beginning
3
4
5
6
7
8
9"|while read; do
touch /tmp/col/"$REPLY"
done
cd /tmp/col/
ls
rm /tmp/col/*
出力:
3 7 something_very_long-something_very_long-something_very_long
4 8 ' space-at-beginning'
5 9
6 'output with space'