割算は1ではなく1.0の様に小数点を付けないと不正確になるので注意
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");}
> : GREATER < : LESS >= : GREATER or EQUAL <= : LESS or EQUAL == : EQUAL && : AND || : OR != : NOT EQUAL
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行全部
close : getline : 次のレコードを読む ($0に現入力ファイルの次のレコードを設定する) getline < input.txt : ファイルから1レコード読む getline var : 次のレコードを読んで変数に代入 getline var < input.txt : ファイルから1レコード読んで変数に代入 system(command) : シェルコマンドを実行
break continue delete exit next
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)
%s : 文字列として出力 %c : 1文字として出力 %d : 10進法 %x : 16進法 %o : 8進法 %f : 浮動小数点 %e : 指数 %5d : 5桁分のスペースをあけて表示 %.3d : 強制的に小数点以下3桁で表示