または、コマンドをfree
使用して列を印刷するには?awk
sed
vmstat
バージョン列によっては、free
5 列目から別の列に変更される場合があります。
bash-3.00$ vmstat 1 1|tail -2
r b w swap free re mf pi po fr de sr s0 s1 s3 -- in sy cs us sy id
0 0 0 38018936 24998752 122 182 33 81 53 0 0 5 7 -0 0 4113 8416 4527 1 0 99
bash-3.00$ vmstat 1 1|tail -2|awk '{print $5}'
free
24998752
ベストアンサー1
入力の最初の行では、すべてのフィールドを繰り返して文字列などのフィールドを見つけますfree
。このフィールド番号を覚えてから、それを使用してそのフィールドのみを出力します。
awk 'NR==1 { for (i=1;i<=NF;++i) if ($i=="free") { n=i; break }} { print $n }'
これNR==1
により、次のブロックは最初の行(つまりヘッダー行)に対してのみ実行されます。この変数はn
フィールドのフィールド番号を保持しますfree
。
提供されたデータをテストしますvmstat 1 1|tail -2
(ここのファイルから読み取るfile
)。
$ awk 'NR==1 { for (i=1;i<=NF;++i) if ($i=="free") { n=i; break }} { print $n }' file
free
24998752
私の元の答えはFNR
代わりに使用しますNR
。残念ながら、awk
これらの変数はSunOSでは使用できませんが、FNR
この場合はNR
他の項目を変更せずに使用できます。
vmstat
また、一部のシステムの出力には、free
列が次のように表示されますfre
(例:OpenBSD)。これはあなたを意味します可能$i ~ "^fre"
代わりに使用したいです$i == "free"
。