head
예:
Desktop:
λ df -h
Filesystem Size Used Avail Capacity iused ifree %iused Mounted on
/dev/disk1s7s1 113Gi 8.9Gi 8.6Gi 51% 355384 90345720 0% /
/dev/disk1s2 113Gi 3.3Gi 8.6Gi 28% 1743 90345720 0% /System/Volumes/Preboot
/dev/disk1s4 113Gi 24Ki 8.6Gi 1% 5 90345720 0% /System/Volumes/VM
/dev/disk1s6 113Gi 63Mi 8.6Gi 1% 660 90345720 0% /System/Volumes/Update
/dev/disk1s5 113Gi 91Gi 8.6Gi 92% 655534 90345720 1% /System/Volumes/Data
/dev/disk1s1 113Gi 64Ki 8.6Gi 1% 15 90345720 0% /Volumes/mnbvcxz - Data
/dev/disk3s1 58Gi 57Gi 843Mi 99% 209 8636800 0% /Volumes/Untitled
Desktop:
λ df -h | head -n1
Filesystem Size Used Avail Capacity iused ifree %iused Mounted on
줄 바꿈 대신 공백으로 필드의 출력을 표시하는 특별한 명령이 있습니까?
cmd는 awk
cmd의 작업을 수행합니다.
Filesystem Size Used Avail Capacity iused ifree %iused Mounted on \
| awk -F ' ' '{print$1}'
Filesystem
답변1
짜증나게도 간격을 깨지 않고 가변 개수의 공백으로 구분된 열 범위를 추출하는 표준 명령은 없습니다.
- 의 경우
cut -d ' ' -f 1-2
단일 공백이 구분 기호이므로 예를 들어 , , , 4" a b"
개의 필드가 있습니다 .""
a
""
b
cut -c 1-4
필드가 아닌 문자만 잘라냅니다.awk '{print $1, $2}'
기본적으로 특수한 동작이므로 선행 및 후행 필드를 무시하고 여러 공백으로 구분된 필드를 추출합니다. 그러나 이러한 필드는 출력에서FS=" "
단일 공백 문자(기본값)로 구분됩니다 .OFS
GNU 또는 호환 방법을 사용하여 필드 사이의 공백을 유지하면서 첫 번째 $n
(또는 대부분의 ) 필드를 추출하려면 다음을 사용하는 방법이 있습니다.$n
grep
n=3
grep -Eo "^(\s*\S+){0,$n}"
(빈 줄을 버립니다)
이제 이 명령의 출력은 df
필드 값 자체에 공백이 포함될 수 있으므로 이러한 방식으로 데이터를 안정적으로 추출할 수 있는 패턴을 따르지 않습니다. Mounted on
헤더나 일부 마운트 지점 의 예를 참조하세요 . 일부 필드는 왼쪽 정렬되고 일부 필드는 오른쪽 정렬되는 방식도 확인하세요. 이 경우 필드 너비를 하드코딩하지 않고 필드를 추출하기가 어렵습니다( cut -c
예: 다음을 사용). 그렇기 때문에 mlr --pprint cut
여기서는 사용할 수 없습니다.
가능하다면 출력을 생성하는 도구에 원하는 열만 인쇄하도록 지시하는 것이 가장 좋습니다. 예를 들어, GNU 구현에서는 다음을 df
사용할 수 있습니다.
df -h --output=source,size,used
출력을 사후 처리해야 하는 경우 구문 분석 가능한 형식으로 출력하는 옵션을 찾으세요. 별로 도움이 되지 않지만 출력 df
을 안정적으로 후처리할 수 없습니다.-P
df
Linux에서는 GNU가 동일한 정보를 사후 처리 가능하게 출력할 수 있는 경우 findmnt
( lsblk
예 stat -f
: df
옵션 참조 -J
)잘못된 UTF-8 문자열이 포함된 JSON을 처리하는 방법그리고 )-c
stat
답변2
을(를) 찾고 있는 것 같습니다 cut
.
귀하의 예에서는 cut -d' ' -f1
.