Bash Cat 파일을 터미널 센터로

Bash Cat 파일을 터미널 센터로

aome ASCII 아트가 포함된 텍스트 파일이 있습니다. 시작될 때 터미널로 인쇄하려고합니다. 나는 이것을 하는 방법을 알고 있으며 내 .bashrc에 cat myfi를 추가합니다. cat의 출력을 중앙에 맞추려고합니다. tput 열을 사용하려는 시도가 실패했습니다.

누구든지 나에게 힌트를 줄 수 있습니까? 아니면 가능하다면.

답변1

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

공간이 부족할 경우 공간을 조정하세요.

답변2

한 가지 방법은 다음 단계를 수행하는 것입니다.

  • 터미널의 너비를 구하세요
  • 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

관련 정보