すべてのリストをTABで区切って1行に表示したいです(ls
フォルダのファイル処理など)。
for i in one two some_are_very_long_stuff b c; do echo $i; done
単語ごとに1行ずつ印刷します。
one
two
some_are_very_long_stuff
b
c
ls
代わりにオプションがないかのように中断したいです。
mkdir /tmp/test
cd /tmp/test
for i in one two some_are_very_long_stuff b c z; do touch $i; done
ls
出力されます
b one two
c some_are_very_long_stuff z
答え1
columns
GNUコマンドを使用できますautogen
。
$ seq 60 | columns
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
53 54 55 56 57 58 59 60
Pass 以下をzsh
使用できますprint -C
。
$ print -C4 {1..20}
1 6 11 16
2 7 12 17
3 8 13 18
4 9 14 19
5 10 15 20
$ print -aC4 {1..20}
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
17 18 19 20
最初にソートする必要がある場合(たとえば、次のようにls
):
$ print -oC4 {1..20}
1 14 19 5
10 15 2 6
11 16 20 7
12 17 3 8
13 18 4 9
答え2
echo
マニュアルページから:
-n do not output the trailing newline
-e enable interpretation of backslash escapes
If -e is in effect, the following sequences are recognized:
...
\t horizontal tab
そうすれば:
for i in one two some_are_very_long_stuff a b c d e f g h i j k l m n o; do
echo -en "$i\t";
done; echo