GNU/Linux >> Linux の 問題 >  >> Linux

AWK で行 (行) を減算する方法

awk を使用してこれを行うこともできます 、 paste 、および bc . awk の構文は、このアプローチを覚えやすいと思います 確認するために、いつも私に物事を調べるように要求します.

注: このアプローチには、1 番目から 2 番目、3 番目、4 番目などの数値を減算して、複数行の出力と競合できるという利点があります。

$ grep -P 'MemTotal|MemFree' /proc/meminfo | \
    awk '{print $2}' | paste -sd- - | bc
7513404

詳細

上記は awk を使用しています 減算する数値を含む列を選択します。

$ grep -P 'MemTotal|MemFree' /proc/meminfo | \
    awk '{print $2}'
7969084
408432

次に paste を使用します これら 2 つの値を結合し、その間にマイナス記号を追加します。

$ grep -P 'MemTotal|MemFree' /proc/meminfo | \
    awk '{print $2}'| paste -sd- -
7969084-346660

これを bc に渡すと 計算を実行します。

$ grep -P 'MemTotal|MemFree' /proc/meminfo | \
    awk '{print $2}'| paste -sd- - | bc
7513404

冗長な cat コマンドや grep コマンドを使用しない純粋な awk ソリューション:

awk '/MemTotal/ {TOT=$2} /MemFree/ {FREE=$2} END {printf("%d kB Used\n", TOT-FREE)}' /proc/meminfo

awk_FTW が私を打ち負かしたように見えますが、出力をフォーマットするのは良いことかもしれません.


これを試してください:

grep -P 'MemTotal|MemFree' /proc/meminfo | \
awk 'NR==1{s=$2;next}{s-=$2}END{print s}'

Linux
  1. 「#」または「;」で始まらない行をgrepする方法は?

  2. Awkを使用して5列を含む行のみを印刷するにはどうすればよいですか?

  3. Mcでワードラップを使用していますか?

  1. コメントされたすべての行またはvimで特定のパターンを持つ行を削除するにはどうすればよいですか?

  2. 特定の列の内容を awk に置き換える方法は?

  3. awkを使用してファイルをインプレースで変更するには? (sed -i と同様)

  1. 「?」で始まる行を無視してファイルを出力する方法は?

  2. ドキュメントの行数を数えるには?

  3. sed 行を結合する