このawkコマンドファイルはメタトレーダー用1分足ファイルの抜けを埋める為に作成した。

#### メタトレーダー向けawkコマンドファイル「one_minute_asi_complement.awk」
- このawkコマンドファイルはメタトレーダー用1分足ファイルの抜けを埋める為に作成した。
- 足が飛んだ時、前の1分足と今回の1分足の間を、分は進めながら前の1分足と同じprice（open,high,low,closeの4種類）で埋める。ただしvolumeは「０」にする。
- 条件は以下の2通りのみである。それ以外（例えばhourが前の足と比べて2以上ズレている場合等）は何もしない。
 
     ・条件１. 足が飛んだ時、前の1分足と今回の1分足のhourが同じ場合は、その間を埋める。→☆１以下の部分
     ・条件２その１. 足が飛んだ時、前の1分足と今回の1分足のhourが1ズレている場合は、まず前のhourの前の1分足の次から59分までを埋める。→☆２以下の部分
     ・条件２その２. 次に今回の1分足と同じhourの抜けている箇所、すなわち~時0分から今回の1分足の一つ手前までを埋める。→☆３以下の部分


**読み込みファイルのデータ形式**

```
2009.04.13,07:30:00,100.385000,100.385000,100.335000,100.352500,16
```

**ターミナルでの実行コマンド例**

```shell
$ awk -f one_minute_asi_complement.awk 1分足読み込み元ファイル名 > 1分足書き出し先ファイル名
```


```shell:one_minute_asi_complement.awk
BEGIN{

  FS=","

  #「pre_minute_addone」はメインアクション内の後半部で定義されるので、awk読み込み最初のレコードの条件比較だけの為にここでまず定義する。
  pre_minute_addone = 0

}

{

  #このパートは、今回読み込んだレコードから、1分足の時刻に関する諸情報を抽出する
  now_minute = substr( $2, index( $2, ":" ) + 1, 2 )#$2の例、例えば06:03:00から「03」を抽出。
  #条件比較部で用いる変数「pre_minute_addone」は数値扱い。上記の「now_minute」はこの段階でまだ文字列として認識されている。その為文字列ではなく数値として認識させるため「+ 0」を行い、新たな数値の変数「now_minute_comparison_ver」を作る。そうするとprint結果も「03」の余分な0が取れて「3」となる。
  now_minute_comparison_ver = now_minute + 0
  now_hour = substr( $2, 1, 2 )#$2の例、例えば06:03:00から「06」を抽出。

  #このパートは実際に抜けている足を、抜けている分だけ埋めていく部分。このコマンドの主要部。
  if( pre_date == $1 && now_hour - pre_hour == 0 && now_minute_comparison_ver != pre_minute_addone ){#条件→足が飛んだ時、前の1分足と今回の1分足のhourが同じかつ日にちも同じ場合
    #☆１  #前の足が例えば10時55分、現在の足が10時59分の場合、ここでは10時56分から10時58分までを補充する。
    division_minutes = now_minute_comparison_ver - pre_minute_addone
    completion_missing_asi( division_minutes, pre_minute_addone, now_hour )
  } else if( pre_date == $1 && now_hour - pre_hour == 1 && now_minute_comparison_ver != pre_minute_addone ){#条件→足が飛んだ時、前の1分足と今回の1分足のhourが1ズレているかつ日にちも同じ場合
    #☆２  #前の足が例えば10時55分、現在の足が11時12分の場合、ここでは10時56分から10時59分までを補充する。「- 1」部分は６０で一時間を強調して可読性をよくすることによる調整の為。
    division_minutes_front_part = 60 - pre_minute -1
    completion_missing_asi( division_minutes_front_part, pre_minute_addone, pre_hour )
    #☆３  #前の足が例えば10時55分、現在の足が11時12分の場合、ここでは11時00分から11時11分までを補充する。
    completion_missing_asi( now_minute_comparison_ver, 0, now_hour )
  }

  #1行ずつ読み込んだ1分足はこちらでそのまま表示する。
  print $0

  #「now_minute_comparison_ver」が59分の場合、次の足は～時60分ではなく～時0分になるので「0」と指定する。それ以外は現在の時刻に1を足す。
  if( now_minute_comparison_ver == 59 ){
    pre_minute_addone = 0
  } else {
    pre_minute_addone = now_minute_comparison_ver + 1
  }

  #次回登場する足との比較用に、今回の1分足の諸情報を記憶しておく。
  pre_record      = $0
  pre_date        = $1
  pre_open_price  = $3
  pre_high_price  = $4
  pre_low_price   = $5
  pre_close_price = $6
  pre_hour        = now_hour
  pre_minute      = now_minute_comparison_ver

}

#この関数は「division_minutes」分だけ、分を進めながら抜けている足を補充する。
function completion_missing_asi( division_minutes, pre_minute_addone, hour ){
  for( i = 0; i < division_minutes; i++ ){
    if( length( pre_minute_addone ) == 1 ){#数値の変数「pre_minute_addone」が一桁の場合「0」を付け加える（例えば「7」であれば「07」に修正する）。
      minute = "0"pre_minute_addone
    } else {
      minute = pre_minute_addone
    }
    print $1","hour":"minute":00,"pre_open_price","pre_high_price","pre_low_price","pre_close_price",0"
    pre_minute_addone = pre_minute_addone + 1
  }
}
```