次の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
元の行を復元し、右揃えの数値を提供します。