Bash 스크립트: 같은 줄에 열 데이터 인쇄

Bash 스크립트: 같은 줄에 열 데이터 인쇄

데이터베이스 크기를 계산하고 PostgreSQL스크립트가 실행된 날짜와 함께 출력을 텍스트 파일로 인쇄하는 bash 스크립트를 작성했습니다. 스크립트 코드는 다음과 같습니다.

#!/bin/bash
date +"%d:%m" >> dbdata.growth
psql -h 192.168.2.173 -U postgres -c "select pg_database_size('ddb'); "  | sed -n    
'3,3p' | numfmt --to=iec >>dbdata.growth
psql -h 192.168.2.173 -U postgres -c "select pg_database_size('dpkidb'); "  | sed  
-n '3,3p' | numfmt --to=iec >>dbdata.growth

스크립트는 아래 표시된 형식으로 다음 출력을 생성합니다.

26:03
         134G
         4.4M
26:03
         134G
         4.4M

나에게 문제는 세 개의 열이 모두 같은 행에 있기를 원한다는 것입니다. 어떻게 해야 하나요?

답변1

모든 출력 라인을 교체하십시오. 예를 들면 다음과 같습니다.

date +"%d:%m" >> dbdata.growth

다음과 같은 라인:

date +"%d:%m" | tr -d $'\n' >> dbdata.growth

tr이는 개행을 출력 파일에 넣기 전에 제거하는 데 사용됩니다 .

tr번역 또는 삭제 유틸리티입니다. 이 경우 이 -d옵션을 사용하여 삭제하도록 지시합니다. 제거를 요청하는 문자는 로 표시되는 개행 문자입니다 $'\n'.

답변2

해결책은 서브쉘을 사용하는 것입니다.

#!/bin/bash
var1=$(date +"%d:%m")
var2=$(psql -h 192.168.2.173 -U postgres -c "select pg_database_size('ddb'); "  | sed -n '3,3p' | numfmt --to=iec)
var3=$(psql -h 192.168.2.173 -U postgres -c "select pg_database_size('dpkidb'); "  | sed  -n '3,3p' | numfmt --to=iec )
echo $var1 $var2 $var3 >>dbdata.growth

답변3

세 개의 열이 있다는 것을 알고 있으면 붙여넣기를 사용할 수 있습니다.

your_script.sh | paste - - -

답변4

#!/bin/bash
{ date +"%d:%m" >> dbdata.growth
psql -h 192.168.2.173 -U postgres -c "select pg_database_size('ddb'); "  | sed -n    
'3,3p' | numfmt --to=iec >>dbdata.growth
psql -h 192.168.2.173 -U postgres -c "select pg_database_size('dpkidb'); "  | sed  
-n '3,3p' | numfmt --to=iec >>dbdata.growth

} | ( 

#all output from your commands above piped to collector subshell below

set -f ; unset IFS ; set -- $(cat)
while [ $# -ge 3 ] ; do {
    printf '%s\t%s\t%s\n' "$1" "$2" "$3"
    shift 3 ; } ; done  
printf '%s\t' "$@"
)

관련 정보