Bash Catファイルをターミナルセンターに

Bash Catファイルをターミナルセンターに

aome ASCIIアートを含むテキストファイルがあります。起動時に端末に印刷しようとしています。私はこれを行う方法を知っており、私の.bashrcにcat myfiを追加します。 catの出力を中央に合わせようとしています。 tput列を使用しようとして失敗しました。

誰でも私にヒントを与えることができますか?または可能であれば。

答え1

sed -e 's/^/                   /' /path/to/ascii_art

スペースが足りない場合は、スペースを調整してください。

答え2

1つの方法は、次の手順を実行することです。

  • 端末の幅を求める
  • ASCIIアートファイルで最長の行を見つける
  • 必要なインデントを得るには、この数字の違いを2で割ります。
  • 各行をインデントしてASCIIアートファイルを印刷します。

awk以下は、計算を実行するサンプルスクリプトです。

#!/bin/sh
input="$1"
twidth=$(tput cols)
echo terminal width is $twidth
indent=$(awk -v twidth=$twidth '    {
                                     w=length();
                                     if (w > fwidth) fwidth=w;
                                    }
                                END {
                                     indent=int((twidth-fwidth)/2);
                                     print (indent > 0 ? indent : 0);
                                    }' < "$input")
echo indent is $indent
awk -v indent=$indent '{ printf("%*s", indent, " "); print; }' < "$input"

以下は大きな文字Lのテストです。

$ cat /tmp/L
#
#
#
#
#
#
#######

$ ./center /tmp/L
terminal width is 81
indent is 37
                                     #
                                     #
                                     #
                                     #
                                     #
                                     #
                                     #######

答え3

example.txt:

praveen
ajay

これで、awkを使用してコンテンツの中央に15個のスペースを追加し始めました。要件に応じてスペースの数を増やす必要があります。

awk '{printf "%15s\n",$1}' example.txt

答え4

よりプログラム的に作業を実行する方法(水平方向と垂直方向に中央揃え):

"cat_center.sh"ファイルに次の内容を含めることができます。

#!/bin/bash
# Get file in variable
LOGO=$(cat "$1")

# Work out logo size
H_SIZE=0
V_SIZE=0
while IFS= read -r line; do
    if [[ ${#line} -ge H_SIZE ]]; then
        H_SIZE=${#line}
    fi
    V_SIZE=$((V_SIZE + 1))
done <<<"$LOGO"
#echo "Horizontal size : $H_SIZE"
#echo "Vertical size : $V_SIZE"

# Work out the horizontal offset
H_WIDTH=$(tput cols)
H_OFFSET=0
if ((H_WIDTH > H_SIZE)); then
    H_OFFSET=$(((H_WIDTH - H_SIZE) / 2))
fi
#echo "Horizontal offset : $H_OFFSET"

# Work out the vertical offset
V_WIDTH=$(tput lines)
V_OFFSET=0
if ((V_WIDTH > V_SIZE)); then
    V_OFFSET=$(((V_WIDTH - V_SIZE) / 2))
fi
#echo "Vertical offset : $V_OFFSET"

# Print the ascii art
clear
# Vertical offset : print spaces and convert to lines
printf '%*s' $V_OFFSET | tr ' ' '\n'
# Horizontal offset : print offset of spaces
while IFS= read -r line; do
    printf "%"$H_OFFSET"s${line}\n"
done <<<"$LOGO"

使用法: ./cat_center.sh my_logo_file

関連情報