예상치 못한 개행 문자가 있는 awk 특정 열

예상치 못한 개행 문자가 있는 awk 특정 열

해결책을 찾을 수 없는 것 같아서 미칠 것 같습니다. 열을 인쇄하는 데 사용할 수 있다는 것을 알고 있습니다 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}'

관련 정보