이전 명령 출력의 이름/값 쌍 정렬

이전 명령 출력의 이름/값 쌍 정렬

hostnamectl명령은 호스트 이름을 포함하지만 FQDN(정규화된 도메인 이름)을 포함하지 않는 일부 올바른 형식의 정보를 출력합니다 hostname -f.

Bash 출력 형식 제어에 대해 자세히 알아보기 위해 이 두 명령을 하나의 명령으로 결합하고 싶습니다. 여기서 두 번째 명령은 첫 번째 명령의 출력 정렬을 따릅니다.

hostnamectl ; fqdn=$(hostname -f) ; echo -e "\t\tFQDN:\t${fqdn}"

FQDN:그러나 첫 번째 하위 명령의 출력과 일관성을 얻을 수는 없습니다 .

스크립트를 작성하지 않고도 첫 번째 출력의 정렬에 따라 두 번째 출력의 형식을 지정할 수 있는 명령이 있습니까? 아닐 것 같지만 물어봐야겠다고 생각했어요.

답변1

정렬을 정적으로 설정하는 데 만족한다면 다음을 수행할 수 있습니다.

hostnamectl ; fqdn=$(hostname -f) ; printf "%18s: %s\n" "FQDN" "${fqdn}"

지정자는 18자 너비 필드에 문자열을 오른쪽 %18s정렬 하여 인쇄합니다. printf( %-18s왼쪽 정렬.)

awk를 사용하여 모든 출력의 크기를 조정할 수도 있습니다.

(hostnamectl ; fqdn=$(hostname -f) ; echo "FQDN: ${fqdn}") |
    awk -F: '{printf "%20s:%s\n", $1, $2}'

( :한 줄에 하나만 있다고 가정)

:또는 awk 스크립트가 첫 번째 줄의 위치를 ​​확인하고 모든 것을 해당 위치에 정렬하도록 합니다.

... | awk -F: 'NR == 1 {w = index($0, ":")} {printf "%*s:%s\n", w, $1, $2}'

(툴을 이용하여 출력을 확인한 hostnamectl후 FQDN이 인쇄되는 콜론 위치를 제공하고,그리고또한 출력을 터미널로 보내려면 혼란스러운 리디렉션 지옥이 필요합니다. 이 방법이 훨씬 쉽습니다. )

관련 정보