Edo::World::Blog

〜Linux/Solaris関連の作業メモ〜

ワンライナー

[Linux] macアドレス変更(ワンライナー)

メモ

続きを読む

[Linux] パイプを使ってリモートホストへファイル転送

備忘録

続きを読む

[Linux] awkメモ

自分がよく使う物をピックアップ。

もっと複雑な処理を行う場合はPerlのワンライナーで書く方が良いと思う。


正規表現とブロック

正規表現でマッチする行を抽出して、必要なカラムのみ表示

$ cat sample.txt 
id   name
----+----------
1    hoge
2    foo         ※fooさんのidを知りたい場合・・・
3    bar

$ awk '/foo$/ {print $1}' sample.txt 
2

第2カラムがhoge、foo、name以外で始まる行を抽出し、カンマ区切りで表示

$ awk '$2 !~ /^hoge|^foo|^name/{print $1","$2}' sample.txt | grep -v '^-'
3,bar


awkで変数を使用する

正規表現の検索条件に変数を指定する場合

  • シングルクォーテーションを一度抜ける方法
$ _man=foo
$ awk '/'${_man}'$/ {print $1}' sample.txt
2
  • シングルクォートからダブルクォートに変更する方法(ただし、print後の$をエスケープする必要)
awk "/${_man}$/ {print \$1}" sample.txt 
2

awk内部の変数として利用する場合

   "-v"オプションを指定宣言

$ free -m
             total       used       free     shared    buffers     cached
Mem:           976        961         15          0         12        748
-/+ buffers/cache:        200        776   ※この行のusedカラムを取って計算
Swap:          999         19        980

※実メモリ使用率を%表記で算出
$ free -m | awk -v _total='976' '/^-\/+/ {print int($3 / _total * 100) }'
20


関数

[int]

  小数点以下切り捨て

list="0.1:5.6:9.22"
echo $list | awk -F\: '{print int($1),int($2), int($3)}'

==実行結果==
0 5 9

[substr]

  文字列の抽出

str="TestMessage"
echo $str | awk '{print substr($1, 1, 4)}'
echo $str | awk '{print substr($1, 2, 5)}'
echo $str | awk '{print substr($1,5)}'

==実行結果==
Test
estMe
Message
プロフィール

edworld

記事検索
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

livedoor 天気
  • ライブドアブログ