해결책을 찾을 수 없는 것 같아서 미칠 것 같습니다. 열을 인쇄하는 데 사용할 수 있다는 것을 알고 있습니다 awk
. 내 파일 시스템이 정렬된 방식으로 인해 특정 열을 인쇄하는 데 문제가 있습니다.
내가 실행할 때 일어나는 일은 다음과 같습니다 df
.
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/vg_root-root
36623968 4484592 30278976 13% /
tmpfs 961312 0 961312 0% /dev/shm
/dev/sda1 516040 102896 386932 22% /boot
1K 블록 열을 하면 awk
파일 시스템 위치의 길이로 인해 다른 열의 값이 반환됩니다. 기본적으로 이런 일이 발생합니다.
1K-blocks
4484596
961312
516040
올바른 열 정보를 나열하려면 어떻게 해야 합니까?
답변1
df
파이프를 통해 들어가는 경우 awk
대신 df -P
파이프를 사용하십시오. 특히 줄 바꿈 없이 쉽게 구문 분석할 수 있도록 설계되었습니다. 헤더 줄( NR >= 2
)을 건너뛰는 것을 잊지 마세요.
이상한 줄 바꿈으로 기존 출력을 구문 분석해야 하는 경우 공백으로 시작하므로 연속 줄을 알 수 있습니다.
awk '
NR==1 {next}
/^ / {print $1}
!/^ / {print $2}
'
그러나 파일 시스템 이름에 공백이 포함되어 열 기반 구문 분석이 문제를 일으킬 수 있는 일부 UNIX 변형(적어도 OSX, 실제로 이런 일이 발생한 유일한 경우라면 놀라지 않을 것입니다)이 있습니다. , , df -P
탭을 사용하지 않습니다).
답변2
FS 이름이 그리 길지는 않지만 다음을 시도해 볼 수 있습니다.
df |grep "%" |grep -v Use |awk {'print $(NF-4)'}
이는 1K 블록이 있는 헤더 행이 필요하지 않다고 가정합니다.
답변3
df -Pk|tail -n +2|column -t | awk '{print $4}'
df -Pk
: 파일 시스템이 나열됩니다.tail -n +2
: 제목이 삭제됩니다.column -t:
형식화된 출력의 경우.awk '{print $4}'
: 네 번째 열의 내용을 인쇄합니다.
답변4
GNU를 사용하면 df
해당 플래그를 사용 하고 다른 답변에서 제안한 대로 -P
파이프 할 수 있습니다. awk
간단하고 명확한 예: 사용 가능한 킬로바이트 수( )를 원하는 경우 df -k
다음이 제대로 작동합니다.
df -kP | awk 'NR>1 {print $4}'
이는 awk에게 첫 번째 열(즉, 헤더 행이 아님) 다음에 모든 행의 네 번째 열을 인쇄하도록 지시합니다.
어쨌든 이 답변을 추가하는 주된 이유는 Solaris(Solaris 9 및 10에서 확인)에서 출력 형식에 유사한 줄 바꿈이 있음에도 불구하고 이 플래그가 실제로 필요하지 않다는 관찰입니다. 이 경우 다음 작업이 수행됩니다. :
df -k | awk 'NR>1 {print $4}'