쉘 스크립트 출력 형식 지정

쉘 스크립트 출력 형식 지정

고정 출력 너비를 사용하는 방법은 무엇입니까 printf?

다음은 예제 스크립트입니다:

#!/bin/bash
OK=$(printf '\t%+50s\n' OK)
FAIL=$(printf '\t%+50s\n' FAIL)
for i in a aa aaa aaaa aaaaaa aaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaa; do
        echo "$i $OK"
done

산출:

a                                                       OK
aa                                                      OK
aaa                                                     OK
aaaa                                                    OK
aaaaaa                                                  OK
aaaaaaaaaaaaaaaaa                                                  OK
aaaaaaaaaaaaaaaaaaaaaaaaaa                                               OK

나는 다음과 같은 것을 원합니다 :

a                                                       OK
aa                                                      OK
aaa                                                     OK
aaaa                                                    OK
aaaaaa                                                  OK
aaaaaaaaaaaaaaaaa                                       OK
aaaaaaaaaaaaaaaaaaaaaaaaaa                              OK

답변1

간단한 방법:

스크립트를 파이프로 연결하세요.column -t

$ script.sh | column -t
a                           OK
aa                          OK
aaa                         OK
aaaa                        OK
aaaaaa                      OK
aaaaaaaaaaaaaaaaa           OK
aaaaaaaaaaaaaaaaaaaaaaaaaa  OK

답변2

printf원하는 출력을 얻으려면 다음 방법을 사용하십시오 .

#!/bin/bash
for i in a aa aaa aaaa aaaaaa aaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaa; do
    printf '%-50sOK\n' $i 
done

스크립트 출력:

a                                                 OK
aa                                                OK
aaa                                               OK
aaaa                                              OK
aaaaaa                                            OK
aaaaaaaaaaaaaaaaa                                 OK
aaaaaaaaaaaaaaaaaaaaaaaaaa                        OK

  • OK- 정적 문자열을 다음 위치로 이동할 때체재( printf FORMAT [ARGUMENT])

  • $i- printf인수 로 처리됨

답변3

출력 형식을 지정하는 도구를 사용하지 않고 있으며 $i너비가 증가함에 따라 출력이 정렬되지 않습니다.

바꾸다

echo "$i $OK"

그리고

printf "%-50s %s\n" "$i" "$OK"

("foo"를 실제 문자열로 바꾸세요).

어디

  • 50s고정 너비 50자 문자열입니다.
  • -(빼기 기호)는 문자열을 왼쪽 정렬합니다.
  • man 3 printf형식 문자열에 대한 자세한 내용은 을 참조하십시오.

관련 정보