異なるファイル間の視差の計算

異なるファイル間の視差の計算

非常に大きなログファイルがあり、開始時刻と終了時刻を呼び出す必要があります。

Bigfile.txt:

2021-02-24 14:21:34,630;START
2021-02-24 14:21:35,529;END  
2021-02-24 14:57:05,600;START
2021-02-24 14:57:06,928;END  
2021-02-24 15:46:45,894;START
2021-02-24 15:46:46,762;END  
2021-02-24 17:49:20,925;START
2021-02-24 17:49:26,243;END  
2021-02-24 18:32:18,166;START
2021-02-24 18:32:18,969;END  

この形式で3番目のファイルを作成する必要があります(START(大ファイルの1行)、END(大ファイルの2行)、Duration(秒単位で報告された違い)の3つの列で構成されています)。

Outputfile.txt:

2021-02-24 14:21:34,630;2021-02-24 14:21:35,529;0,899
2021-02-24 14:57:05,600;2021-02-24 14:57:06,928;1,328

ファイル全体について。誰でも私を助けることができますか? Bashスクリプトで動作するようにどのように設定しますか?誰かが私にも説明できれば:D

すべてのサポートに感謝します。

ベストアンサー1

私はGNUについて次の提案をしますawk

awk -F'[,;]' \
  # odd lines (START)
  'NR%2 == 1 {
    # set a to date an miliseconds
    a = $1","$2
    # set d1 to date replacing - and : for spaces
    d1 = gensub(/[-:]/," ","g",$1)
    # set m1 to miliseconds
    m1 = $2 
  } 
  # even lines (END)
  NR%2 == 0 {
    OFS=";"
    # the same as before...
    b = $1","$2
    d2 = gensub(/[-:]/," ","g",$1)
    m2 = $2
    # set c and d to seconds and miliseconds
    c = mktime(d2)"."m2
    d = mktime(d1)"."m1
    # print
    print a, b, c-d
  }' file

出力:

2021-02-24 14:21:34,630;2021-02-24 14:21:35,529;0.899
2021-02-24 14:57:05,600;2021-02-24 14:57:06,928;1.328
2021-02-24 15:46:45,894;2021-02-24 15:46:46,762;0.868
2021-02-24 17:49:20,925;2021-02-24 17:49:26,243;5.318
2021-02-24 18:32:18,166;2021-02-24 18:32:18,969;0.803

おすすめ記事