• ベストアンサー

printfについて。3フィールド目から最後のフィールドまで表示させたい。

すいません。psコマンドの表示で、printfを使って 表示させているのですが、$3,$4,$5,$6,$7,$8。。。。 ととりあえず末尾まではこれだけあれば大丈夫だろう。 という数値をいれてるので、不細工になっています。 これを、$3~$NFという具合にあらわせないでしょうか

質問者が選んだベストアンサー

  • ベストアンサー
  • trapezium
  • ベストアンサー率62% (276/442)
回答No.2

これを見ると$9以降を加工せず表示してるようですので、 awk '{a=$5/1024; b=$6/1024; if(a==0 || b==0) next; printf "%-8s %-5s %-5s %-5.1fM %-5.1fM ",$1,$3,$4,a,b; for (i=9;i<=NF;i++) printf " %s",$i; printf "\n"}' とループさせるか、環境依存になりますが直接カラム位置を指定して、 awk '{a=$5/1024; b=$6/1024; if(a==0 || b==0) next; printf "%-8s %-5s %-5s %-5.1fM %-5.1fM %s\n",$1,$3,$4,a,b,substr($0,55,length)}' 見たいに切り出すのが楽かも知れません。

r-linux
質問者

お礼

連絡めちゃくちゃ遅れました。 ありがとうございます。 意外と簡単な記述にはならないみたいですね 甘く見てました。まだまだ勉強不足です。 substrはなんとなくわかるのですが、やはり プラス+のあたりがまったくわからないので 調べてみますね 情報どうもでした!!

その他の回答 (1)

  • trapezium
  • ベストアンサー率62% (276/442)
回答No.1

例えばこういうことですか? ps a | awk '{sub(" *[0-9]+ +[[:alnum:]]+ +", ""); print $0}' $0を書き換えたくなければ、最初に別の変数に入れてからsub()とか。 見当違いなら無視して。

r-linux
質問者

お礼

ありがとうございます。プラス+を使うなんてまったく わからないレベルなもんで今は以下のようにして 対応しております。。。 ps aux --sort -rss |\ awk '{printf ("%-8s %-5s %-5s %-5.1f%s %-5.1f%s %s %s %s %s %s %s\n",$1,$3,$4,$5/1024,"M",$6/1024,"M",$9,$10,$11,$12,$13,$14)}'|\ awk '!/0.0 M/{if(20>=NR){print}}' この13とか14とかまでいかずとも何フィールド以降を表示しなさい。 という風にしたいのです。なんとかならないでしょうか

関連するQ&A

専門家に質問してみよう