
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
이는 탭 기반 답변의 일반화이지만 반드시 탭을 삽입할 필요는 없습니다.