Awk

割算は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桁で表示

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!

Name*


Email*


Message*




* Indicates required field

Daiphys Technologies LLC - https://www.daiphys.com/

  • Last modified: 2023/07/28 09:20
  • by Daiphys