awkの使い方(基礎)

使うawk

awkには色々な種類がありますが、ここではGNUawkを使うので以下をインストール

$ sudo apt install gawk

awkコマンド

grepみたいに検索できる

色々awkコマンド

今回もseqを先に付けて出力し、awkで出力する方法を変えます

  • awk '/[24]/'
  • awk '$1%2==0'
  • awk '$1%2==0{printf("%d even", $1)}'
  • awk '$1%2==0{printf("%d even", $1)}$1%2!=0{printf("%d odd", $1)}'
  • awk 'BEGIN{a=0}$1%2==0{printf("%d even", $1)}$1%2!=0{printf("%d odd", $1)}{a=+$1}END{printf("%d sum is", a)}'

awk '/[24]/'

正規表現で2か4なら出力する

$seq 5|awk '/[24]/'
2
4

awk '$1%2==0'

「$1」...読み込んだ行の1列目の文字列

$ seq 5| awk '$1%2==0'
2
4

awk '$1%2==0{printf("%d even", $1)}'

{}前に書かれているのは条件、C言語みたいに書ける

seq 5| awk '$1%2==0{printf("%d even\n", $1)}'
2 even
4 even

awk '$1%2==0{printf("%d even\n", $1)}$1%2!=0{printf("%d odd\n", $1)}'

(条件){処理}(条件){処理}で書ける

$ seq 5|awk '$1%2==0{printf("%d even\n", $1)}$1%2!=0{printf("%d odd\n", $1)}'
1 odd
2 even
3 odd
4 even
5 odd

awk 'BEGIN{a=0}$1%2==0{printf("%d even\n", $1)}$1%2!=0{printf("%d odd\n", $1)}{a+=$1}END{printf("sum is %d\n", a)}'

BEGINの直後の処理は、awkが1行目の処理を始める前にやってほしい処理
ENDの直後の処理は、awkが最終行の処理を終えた後にやってほしい処理

$ seq 5 | awk 'BEGIN{a=0}$1%2==0{printf("%d even\n", $1)}$1%2!=0{printf("%d odd\n", $1)}{a+=$1}END{printf("sum is %d\n", a)}'
1 odd
2 even
3 odd
4 even
5 odd
sum is 15

見てる本

1日1問、半年以内に習得 シェル・ワンライナー160本ノック (Software Design plusシリーズ)

以上

シェアする