使う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シリーズ)
以上
経済学科卒業→東京区役所職員のバリバリ文系からIT業界へ転職
独学で基本情報、応用情報取得
Androidエンジニア、Kotlin、C、Linux