次の行でファイルの出力を生成します。

次の行でファイルの出力を生成します。

次の3つのファイルがあります。abc.txt、def.txt、xyz.txt。シェルスクリプトを作成したので、この3つのファイルの内容を以下のように1行ずつ表示したいと思います。

abc ---- 1  2  3  4  5  6  7
def ---- 3  5  7  9 11 13 15
xyz ---- 4  8 12 16 20 24 28

ファイルの内容も次のようにする必要があり、各値は並列に表示する必要があります。シェルスクリプトを作成するのに役立ちますか?しかし、実際にスクリプトを実行すると、次のように表示されます。

abc ---- 1 2 3 4 5 6 7
def ---- 3 5 7 9 11 13 15
xyz ---- 4 8 12 16 20 24 28

だから、上記のように出力内容を整理したいと思います。私のスクリプトで使用する場所は上記の要件を満たしています。

 for f in abc.txt def.txt xyz.txt; do (cat "${f}"; echo) >> output.txt; done
|awk '{printf "%-10s|%-10s|%-10s|%-10s|%-10s|%-10s|%-10s\n",$1,$2,$3,$4,$5,$6,$7} output.txt > final_output.txt

スクリプトを生成するのは良いアプローチですか?

ベストアンサー1

列コマンドを使用できます

./your_script |  column -t -s' ' 

これは目的の出力に近いですが、数値は右揃えではありません。

abc  ----  1  2  3   4   5   6   7
def  ----  3  5  7   9   11  13  15
xyz  ----  4  8  12  16  20  24  28

数値を右揃えにするには、次のようにシェルスクリプトの出力をrevコマンドとcolumnsコマンドにパイプします。

./your_script | rev | column -t -s' '  | rev
  • 最初はrev各行を反転します。
  • 次に、columns コマンドはスペースを区切り文字として使用して列を生成します。
  • 最後に、最後の項目はrev元の行を復元し、右揃えの数値を提供します。

おすすめ記事