105

表形式のテキストを出力したい。私がやろうとしたことは、配列の要素を「\t」でエコーすることでしたが、ずれていました。

私のコード

for((i=0;i<array_size;i++));
do
   echo stringarray[$i] $'\t' numberarray[$i] $'\t' anotherfieldarray[$i]
done;

私の出力

a very long string..........     112232432      anotherfield
a smaller string         123124343     anotherfield

望ましい出力

a very long string..........     112232432      anotherfield
a smaller string                 123124343      anotherfield
4

9 に答える 9

176

コマンドを使用します。

column -t -s' ' filename
于 2012-10-07T12:39:10.783 に答える
112

printf素晴らしいですが、人々はそれを忘れています。

$ for num in 1 10 100 1000 10000 100000 1000000; do printf "%10s %s\n" $num "foobar"; done
         1 foobar
        10 foobar
       100 foobar
      1000 foobar
     10000 foobar
    100000 foobar
   1000000 foobar

$ for((i=0;i<array_size;i++));
do
    printf "%10s %10d %10s" stringarray[$i] numberarray[$i] anotherfieldarray[%i]
done

文字列に使用%10sしたことに注意してください。 %s重要な部分です。文字列を使用するように指示します。真ん中は、10それが何列になるかを示しています。 %d数値(数字)用です。

man 1 printf詳細については。

于 2012-10-08T12:27:31.390 に答える
19

必要とまったく同じ出力を得るには、次のようにファイルをフォーマットする必要があります。

a very long string..........\t     112232432\t     anotherfield\n
a smaller string\t      123124343\t     anotherfield\n

そして、次を使用します。

$ column -t -s $'\t' FILE
a very long string..........  112232432  anotherfield
a smaller string              123124343  anotherfield
于 2012-10-07T13:07:25.293 に答える