ファイルから特定のデータを抽出するには、キーワード[awk]を使用してください。

ファイルから特定のデータを抽出するには、キーワード[awk]を使用してください。

次のような複雑なファイルがあります。

configuration {
  step        58000
  dt 2.00000000000000e+00
}

colvar {
  name r
      x  1.44869849559022e+01
}

0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00
0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00

hill {
  step         1440
  weight    1.00000000000000e-01
  centers   1.47455750990065e+01 -1.69229380745887e+02
  widths    1.25331413731550e+00  1.25331413731550e+00
}
hill {
  step         1560
  weight    1.00000000000000e-01
  centers   1.47435719215456e+01 -1.70289673373179e+02
  widths    1.25331413731550e+00  1.25331413731550e+00
}
hill {
  step         1680
  weight    1.00000000000000e-01
  centers   1.47427376221419e+01 -1.68774767870364e+02
  widths    1.25331413731550e+00  1.25331413731550e+00
}  

このファイルからストライド、重量、幅を抽出し、タブ区切りを使用して新しい出力ファイルに書き込むことに興味があります。このように:-

#!step   width1                    width2             weight
1440   1.25331413731550e+00  1.25331413731550e+00   1.00000000000000e-01

私は次のように書かれたステップと重量を持っています。

awk ' b ~ /hill/ && a ~ /step/ && /weight/ {print v"\t"$2}{b=a;  a=$0; v=$2}' input > output

幅を書くように拡張するにはどうすればよいですか?

ベストアンサー1

getline 関数を使用して、次の行を読み取ることができます。

$ awk -vOFS='\t' '/^hill {/{ 
    getline; st=$2
    getline; we=$2
    getline; getline; wd1=$2; wd2=$3
    print st, we, wd1, wd2
}' file
1440    1.00000000000000e-01    1.25331413731550e+00    1.25331413731550e+00
1560    1.00000000000000e-01    1.25331413731550e+00    1.25331413731550e+00
1680    1.00000000000000e-01    1.25331413731550e+00    1.25331413731550e+00

おすすめ記事