Awk
Tips
割算は1ではなく1.0の様に小数点を付けないと不正確になるので注意
Sample
awk '{print $1 $3}' : 続けて表示 awk '{print $1, $3}' : 出力フィールドセパレータで区切って表示 awk '{printf "%4d %s\n", $1, $3}' : 指定フォーマットで表示 awk '(NR==2){print $2}' : 2行目の2列目だけ表示 awk '(NR%5==0){print}' : 5行おきに出力 awk '{print $1*3.0, $3}' : 列ごとの計算 awk '{s+=$1}END{print "sum:", s, "average:", s/NR}' : すべての行の足し算 awk 'BEGIN{a=0}{a=a+$1}END{print a}' : すべての行の足し算 awk '($1>=20)&&($1<=100)' : 1列目が20以上かつ100以下の行だけ表示 awk '{printf "%f\n", ($3*'${hoge}')*2.5}' : シェル変数を使用する場合は''で囲む echo "1 2" | awk '{print $1+$2}' : パイプによる計算 awk 'BEGIN{OFS=","}{print $1, $2}' : 区切りをカンマで出力 awk '{print substr($0, 9, 4)}' : 9文字目から4文字取り出す echo "abcdef" | awk '{print substr($1, 3, 2)}' : 3文字目から2文字分を表示 awk '{print length(), $0}' : 文字列の長さ awk '{$1=""; print $0}' : 最初のフィールドを除外する awk '{$NF=""; print $0}' : 最後のフィールドを除外する awk '($3>0){print $1, $2*3, hoge}' hoge=${HOME} : フィールド差し替え awk -F, -f input.awk input.txt : ファイル処理 awk '/exp/ {print $0}' : exp式に適合する部分文字列があるか awk '/^#/' : #で始まる行を表示 awk '/^#/ {print}' : #で始まる行を表示 awk '$2~/exp/ {print $0}' : exp式が正規表現に適合するか awk '$2~!/exp/ {print $0}' : exp式が正規表現に適合しないか awk '$2==""' : 2フィールド目が空文字列 awk '$2 ~ /^$/' : 2フィールド目が空文字列 (正規表現を利用) awk '$2 !~ /./' : 2フィールド目が空文字列 (正規表現を利用) awk 'length($2) == 0' : 2フィールド目が空文字列 (関数を利用) awk 'NF % 2 !=0' : フィールド数が奇数のみ表示 awk 'length($0) > 72' : 1行が72文字以下のみ表示 awk '{if(/_x/){print $1, $2, $3-1}else{print}}' : conditional if awk '{if($2<=$3+1){print $1, $2, $3-1}else{print}}' : conditional if echo "" | awk '{for(i=0; i<5; i=i+1){print i}}' : for loop echo "" | awk '{i=1; while(i<=10){print i; i++}}' : while loop awk '{if(NR%3==2){sub(/$/,""); printf("%s", $0)}else{print}}' : ある条件で連結 awk '{printf("%s ", $0)}' : 横に連結 awk '{print "hoge" > "/dev/tty"}' : ターミナルへの打ち出し awk '{nc+=length($0)+1; nw+=NF}END{print NR, nw, nc}' : wc emulator ## 3行名以降だけ表示 awk '{for(i=3; i<NF; i++){printf("%s ", $i)}; {printf("%s\n"), $NF}}' ## 1列目と2列目だけ変更して3行名以降はそのまま表示 (列の数が不明な場合に使用) awk '{printf("%s", $0); printf("%s", $1); for(i=3; i<=NF; i++){printf("%s ", $i)}; printf("\n");}
Operator
> : GREATER < : LESS >= : GREATER or EQUAL <= : LESS or EQUAL == : EQUAL && : AND || : OR != : NOT EQUAL
Special
ARGC : コマンド行にある引数の数 ARGV : コマンド行にある引数の配列 FILENAME : 現在の入力ファイル名 FNR : 現在のファイルの入力レコード数 FS : 入力フィールドセパレータ (Default = Space) OFS : 出力フィールドセパレータ (Default = Space) NF : 現在の入力レコードのフィールド数 NR : 現在までの入力レコード数 = 行番号 RS : 入力レコードセパレータ (Default = \n) ORS : 出力レコードセパレータ (Default = \n) OFMT : 数値の出力形式 (Default = %.6g) NF(ARGC) : フィールドの数 NR : 処理中の行の順番 $NF : 最後のフィールド $NR : 最初のフィールド $0 : 1行全部
I/O
close : getline : 次のレコードを読む ($0に現入力ファイルの次のレコードを設定する) getline < input.txt : ファイルから1レコード読む getline var : 次のレコードを読んで変数に代入 getline var < input.txt : ファイルから1レコード読んで変数に代入 system(command) : シェルコマンドを実行
Action
break continue delete exit next
Function
gsub(r, s, t) index(s, t) length(s) match(s, r) split(s, a, fs) substr(s, i, n) sprintf(fmt, expr) cos(x) sin(x) exp(x) log(x) sqrt(x) int(x)
Format
%s : 文字列として出力 %c : 1文字として出力 %d : 10進法 %x : 16進法 %o : 8進法 %f : 浮動小数点 %e : 指数 %5d : 5桁分のスペースをあけて表示 %.3d : 強制的に小数点以下3桁で表示
Acknowledgments
Daiphys is a professional-service company for research and development of leading-edge technologies in science and engineering.
Get started accelerating your business through our deep expertise in R&D with AI, quantum computing, and space development; please get in touch with Daiphys today!
Daiphys Technologies LLC - https://www.daiphys.com/