11

次の出力をフォーマットする方法を考えていました。

-0.3116274D-04
-0.2389361D-04
-0.1192458D-04
0.3306203D-04
0.2534987D-04
0.1265136D-04
-0.2167920D-04
-0.3713258D-04
-0.2294900D-05
-0.4151710D-05
-0.7674479D-03
-0.5749288D-04
0.1393479D-04
0.6763913D-04
0.2515100D-05
-0.3638000D-06
-0.2630000D-06
-0.2445230D-06
0.1534680D-05
0.1579750D-04
0.2922010D-04
0.5390530D-04
0.8701990D-04
0.1132741D-03
0.9665700D-04
0.3337340D-04
-0.4121240D-05

最初に転置することにより、5 つの列に変換します。

-0.3116274D-04  -0.2389361D-04  -0.1192458D-04   0.3306203D-04   0.2534987D-04
 0.1265136D-04  -0.2167920D-04  -0.3713258D-04  -0.2294900D-05  -0.4151710D-05
-0.7674479D-03  -0.5749288D-04   0.1393479D-04   0.6763913D-04   0.2515100D-05
-0.3638000D-06  -0.2630000D-06  -0.2445230D-06   0.1534680D-05   0.1579750D-04
 0.2922010D-04   0.5390530D-04   0.8701990D-04   0.1132741D-03   0.9665700D-04
 0.3337340D-04  -0.4121240D-05          

私の最初のアプローチは次のとおりです。

sed 's/\n//g' File | column -n
4

5 に答える 5

27

これを試して:

printf "%14s  %14s  %14s  %14s  %14s\n" $(cat data.txt)
于 2013-11-08T02:30:33.340 に答える
0

少しトリッキーな代替手段:

columnPrint(){
select foo in $(cat); do break; done; <<!SELECTEOF
1
!SELECTEOF
};

cat data.txt | columnPrint;
# or simply columnPrint < data.txt

@traybold アプローチと比較すると、項目に番号が付けられるという欠点がありますが (これは希望どおりにはなりません)、列数を入力文字列と端末の幅に自動的に適合させるという利点もあります。

于 2016-02-25T10:22:23.730 に答える
0

うわー、これはしばらく見ていない。いくつかの方法があります:

古い prコマンドは、このタイプの作業に使用されました。特に、これらの列を水平ではなく垂直にしたい場合に使用されます。

ただし、これを使用するprintfと、テキストを一定の幅に保つことができ、カウンターとモジュロ演算子を使用して、1 行に 5 つのアイテムがある場合にカウントします。モジュロ演算子は、剰余演算子と呼ばれることもあります。ただし、時計のように機能します。

#!/bin/bash
# 

count=0
while read number
do
    ((count+=1))
    printf "%14.14s  " $number
    if ((count % 5 == 0))
    then
        printf "\n"
    fi
done < $file
printf "\n"

の形式にprintfマイナス (つまり%-14.14s) がありません。これにより、テキストは左ではなく右に配置されます。そうすれば、マイナスは私を失望させません。

于 2013-11-08T02:43:44.433 に答える