fstab 아래에 나열된 항목을 기반으로 마운트된 파일 시스템을 확인하는 스크립트가 있습니다. 여기서 직면한 문제는 출력을 정렬된 상태로 유지하는 것입니다.
다음은 스크립트 출력입니다.
/ is mounted OK
/boot is mounted OK
/was8 is mounted OK
/was8/slogs is mounted OK
/was8/cluster is mounted OK
/was8/working is mounted OK
/was8/app is mounted OK
/was8/tools is mounted OK
/was8/plugin is mounted OK
/was8/coreproduct is mounted OK
...
선을 정렬된 상태로 유지하고 싶으므로 다음과 같아야 합니다.
/ is mounted OK
/boot is mounted OK
/was8 is mounted OK
/was8/slogs is mounted OK
/was8/cluster is mounted OK
/was8/working is mounted OK
/was8/app is mounted OK
/was8/tools is mounted OK
/was8/plugin is mounted OK
/was8/coreproduct is mounted OK
...
컬럼과 xargs를 시도했지만 원하는 결과를 얻을 수 없습니다. 누군가 나를 도와주세요.
답변1
일반적으로 인쇄할 때 형식 문자열의 너비를 printf
. 문자열은 오버플로되지 않는 한 20자 (*) 너비의 필드에 인쇄됩니다 . %-20s
20자로 만들고 오버플로를 제거합니다.%-20.20s
(* 예를 들어 Bash는 printf
실제로 중요하지만바이트. 차이점은 UTF-8과 같은 문자를 통해 확인할 수 있습니다 ä
. )
예를 들어
printf "%-40s %s\n" "$mountpoint is mounted" "$status"
첫 번째 부분의 너비는 (적어도) 40자입니다.
/was8/coreproduct is mounted OK
...
또는 이러한 입력을 사후 처리해야 하는 경우 Perl 또는 awk를 사용할 수 있습니다.
perl -pe 's/(.*) +(\S+)$/ sprintf "%-40s %s", $1, $2 /e' < file
awk '{s=$NF; sub(/ *[^ ]+ *$/, "", $0); printf "%-40s %s\n", $0, s}' < file
둘 다 기본적으로 공백이 아닌 마지막 문자열을 분리한 다음 고정 너비 필드의 첫 번째 부분과 함께 두 부분을 인쇄합니다.
또는 필드 간의 구분을 정확히 동일하게 유지하는 데 신경 쓰지 않으면 @가 더 간단한 솔루션에 주석을 달았습니다.조아오할 것이다:
awk '{s=$NF; NF-- ; printf "%-40s %s\n", $0, s}' < file
그러면 다음과 같은 출력이 생성됩니다. 이전 두 공간이 is mounted
하나로 축소되었습니다. 이는 awk
필드가 수정될 때 전체 필드가 다시 작성되기 때문에 발생합니다 .$0
NF
/was8/coreproduct is mounted OK
답변2
혼란스러운 Perl:
perl -ne 'printf "%-40s %s", /(.*) (.*)/s'
답변3
한 가지 방법은 상태 코드 앞에 탭을 추가하는 것입니다. 예를 들면 다음과 같습니다.
<input rev | sed 's/ /\t/' | rev | column -s $'\t' -t
산출:
/ is mounted OK
/boot is mounted OK
/was8 is mounted OK
/was8/slogs is mounted OK
/was8/cluster is mounted OK
/was8/working is mounted OK
/was8/app is mounted OK
/was8/tools is mounted OK
/was8/plugin is mounted OK
/was8/coreproduct is mounted OK
/was8/ihs is mounted OK
/was8/backup is mounted OK
/was8/ihs/logs is mounted OK
/was8/wsdm is mounted OK
/was8/ws is mounted OK
/was8/ihs/logs/analysis is mounted OK
답변4
이는 컬럼 유틸리티를 사용하여 쉽게 수행할 수도 있습니다. 핵심은 "열" 사이에 일종의 구별 표시를 포함하는 것입니다. 예를 들어 공간이 구별되는 표시라면 column -s ' ' -o ' ' -t
공간적으로 완벽하게 정렬됩니다.
나는 그것을 많이 사용하고 심지어 내 코드를 정렬하는 데 사용하는 멋진 vim 매크로를 만들었습니다. 원하는 일반 구문은 다음과 같습니다.
column -s <Separator String> -o <Separator String in Output> -t
이는 탭 기반 답변을 일반화한 것이지만 반드시 탭을 삽입할 필요는 없습니다.