[Shell Script] 텍스트 좌우 정렬, 가운데 공백 채우기

프로그래밍/BASH SHELL|2024. 7. 5. 11:39
반응형

결과를 출력해야 하는 파일에서 아래 예제를 적용해 사용하면 됩니다.

한글은 원래 3 bytes 이지만 한글 한 글자가 영문 두 글자를 차지하므로, 2bytes 로 체크 해야 하는 것이 포인트 입니다.

한글 문자를 2 bytes 로 간주하고 문자열의 자릿수를 계산하려면, 각 문자의 유니코드 포인트를 확인하여 한글 문자인지 판단하고, 바이트 수를 계산해야 합니다.

 

# vi result.sh

#!/bin/bash

CALCULATE_LENGTH() {
    local input="$1"
    local length=$(echo -n "$input" | perl -C -Mutf8 -lpe '$_=length(join("",map{/[\x{AC00}-\x{D7AF}]/ ? "xx" : $_} split //))')
    echo "$length"
}

PRINT_ALIGNED() {
        left="$1"
        right="$2"
        total_length=60
        left_length=$(CALCULATE_LENGTH "$1")
        right_length=$(CALCULATE_LENGTH "$2")
        space_length=$((total_length - left_length - right_length))
        printf "%s%*s%s\n" "$left" "$space_length" "" "$right"
}

# 결과 파일 초기화
> a.txt

# 출력 내용 작성
PRINT_ALIGNED "티스토리 홈페이지" "100점" >> a.txt
PRINT_ALIGNED "sysdocu" "90점" >> a.txt
PRINT_ALIGNED "ID 는 sysdocu, 이름은 개발왕자" "100점" >> a.txt

cat a.txt

 

# sh result.sh

 

반응형

댓글()