
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
。