awk を使用して列ヘッダーを照合し、列値を印刷します。

awk を使用して列ヘッダーを照合し、列値を印刷します。

または、コマンドをfree使用して列を印刷するには?awksed

vmstatバージョン列によっては、free5 列目から別の列に変更される場合があります。

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"

おすすめ記事