
私は ... という形式の上部気球データを扱っています。
**254 12 1 JAN 2002
1 94703 72501 40.87N 72.87W 20 1116**
2 100 100 250 40 32767 3
**3 OKX 32767 ms**
**9 1014 20 -105 -130 310 5**
5 1008 66 -71 -91 32767 32767
**4 1000 131 -45 -95 315 20**
5 946 565 -63 -143 32767 32767
**4 925 741 -75 -155 20 36**
5 865 1257 -117 -177 32767 32767
**4 850 1393 -117 -197 290 56**
5 839 1493 -107 -187 32767 32767
5 757 2276 -151 -221 32767 32767
5 745 2396 -143 -303 32767 32767
5 727 2581 -145 -285 32767 32767
4 700 2869 -161 -301 275 190
5 693 2944 -165 -325 32767 32767
5 676 3130 -175 -285 32767 32767
5 668 3219 -179 -359 32767 32767
5 651 3411 -191 -271 32767 32767
5 595 4076 -219 -279 32767 32767
5 574 4338 -225 -305 32767 32767
5 557 4558 -229 -429 32767 32767
4 500 5350 -285 -455 260 324
5 459 5955 -333 -483 32767 32767
5 438 6281 -359 -459 32767 32767
5 430 6408 -367 -447 32767 32767
5 420 6571 -365 -485 32767 32767
4 400 6910 -387 -537 255 401
5 370 7439 -429 -559 32767 32767
5 361 7605 -427 -567 32767 32767
4 300 8830 -521 -631 250 483
5 279 9295 -553 -653 32767 32767
4 250 9990 -569 -679 250 550
5 236 10354 -569 -689 32767 32767
4 200 11410 -539 -729 255 545
5 189 11772 -537 -737 32767 32767
4 150 13250 -559 -789 260 581
5 139 13731 -581 -811 32767 32767
4 100 15790 -623 -843 255 380
254 0 2 JAN 2002
1 94703 72501 40.87N 72.87W 20 2305
2 100 179 263 26 32767 3
3 OKX 32767 ms
9 1016 20 -13 -113 320 36
4 1000 150 -13 -123 320 72
4 925 764 -71 -141 320 144
5 873 1210 -113 -152 32767 32767
4 850 1416 -125 -185 340 164
5 836 1542 -129 -239 32767 32767
5 787 2002 -119 -289 32767 32767
4 700 2892 -173 -353 310 164
5 577 4313 -253 -423 32767 32767
5 557 4569 -235 -435 32767 32767
5 536 4848 -257 -377 32767 32767
4 500 5350 -291 -401 285 344
5 442 6217 -357 -507 32767 32767
4 400 6910 -389 -569 275 416
4 300 8850 -477 -677 270 607
4 250 10040 -521 -711 265 602
5 219 10891 -539 -739 32767 32767
5 215 11010 -511 -731 32767 32767
4 200 11480 -533 -753 260 581
4 150 13320 -563 -803 32767 32767
5 109 15314 -623 -843 32767 32767
4 100 15850 -621 -841 265 669
列 1 はライン タイプ インジケーター (LTI) です (LTI) 説明 254 はヘッダーで、0 (時刻 0 または 12Z)、2 (日)、Jan (月)、2002 (年) が含まれます。出力ファイルに新しい測深があることを示します。1 はサイトの緯度経度や標高などのその他の重要な情報を示します。3 サイト名と風速測定値 (m/s)、9 表面情報、4 必須レベル、5 重要なレベル
2002年から2019年までのすべての観測データを含むテキストファイルがあります。ファイル内の各サウンディングは同じ形式です。抽出しようとしているデータは、(LTI) 254 (行全体) 1 (行全体) 3 (行全体) 9 (行全体) です。残りのデータは、ファイルの列1と2でフラグが付けられます。これらは必須の観測圧力レベル4 1000、残りの行4 925、残りの行4 850、残りの行です。
ファイルの下部に行くほど、時間は増加します。私は次のような新しいファイルに出力したいと考えています。
254 12 1 JAN 2002
1 94703 72501 40.87N 72.87W 20 1116
3 OKX 32767 ms
9 1014 20 -105 -130 310 5
4 1000 131 -45 -95 315 20
4 925 741 -75 -155 20 36
4 850 1393 -117 -197 290 56
254 0 2 JAN 2002
1 94703 72501 40.87N 72.87W 20 2305
2 100 179 263 26 32767 3
9 1016 20 -13 -113 320 36
4 1000 150 -13 -123 320 72
4 925 764 -71 -141 320 144
4 850 1416 -125 -185 340 164
ありがとう
答え1
Raku (旧称 Perl6) の使用
~$ raku -ne '.trim-leading.put if .words[0].grep(rx/"**"? <(254 | 1 | 3 | 9)> /) | (.words[0].grep("4" | "**4") && .words[1].grep(rx/1000 | 925 | 850 /)) ;' UABalloon.txt
**254 12 1 JAN 2002
1 94703 72501 40.87N 72.87W 20 1116**
**3 OKX 32767 ms**
**9 1014 20 -105 -130 310 5**
**4 1000 131 -45 -95 315 20**
**4 925 741 -75 -155 20 36**
**4 850 1393 -117 -197 290 56**
254 0 2 JAN 2002
1 94703 72501 40.87N 72.87W 20 2305
3 OKX 32767 ms
9 1016 20 -13 -113 320 36
4 1000 150 -13 -123 320 72
4 925 764 -71 -141 320 144
4 850 1416 -125 -185 340 164
上記のコードは、空白で分割する.grep
Raku の機能に依存しています。" " で始まる行をキャプチャするためのコードが含まれています。このメソッドは、出力から先頭の空白を削除します。.words
**
.trim-leading
このソリューションは 2 つのステップで進行することがわかります。先頭と末尾のアスタリスクを削除するには、上記のコードを実行して に保存しtmp_file.txt
、次のコードを実行します。
~$ raku -pe 's:g/ \** (.+?) \** /$0/;' tmp.txt
254 12 1 JAN 2002
1 94703 72501 40.87N 72.87W 20 1116
3 OKX 32767 ms
9 1014 20 -105 -130 310 5
4 1000 131 -45 -95 315 20
4 925 741 -75 -155 20 36
4 850 1393 -117 -197 290 56
254 0 2 JAN 2002
1 94703 72501 40.87N 72.87W 20 2305
3 OKX 32767 ms
9 1016 20 -13 -113 320 36
4 1000 150 -13 -123 320 72
4 925 764 -71 -141 320 144
4 850 1416 -125 -185 340 164
ありがとう。
答え2
$ awk '$1 ~ /^(254|1|3|9)$/ || ($1 == 4 && $2 ~ /^(1000|925|850)$/)' input.txt
254 12 1 JAN 2002
1 94703 72501 40.87N 72.87W 20 1116
3 OKX 32767 ms
9 1014 20 -105 -130 310 5
4 1000 131 -45 -95 315 20
4 925 741 -75 -155 20 36
4 850 1393 -117 -197 290 56
254 0 2 JAN 2002
1 94703 72501 40.87N 72.87W 20 2305
3 OKX 32767 ms
9 1016 20 -13 -113 320 36
4 1000 150 -13 -123 320 72
4 925 764 -71 -141 320 144
4 850 1416 -125 -185 340 164
これは、次のいずれかの入力行を出力します。
- $1 は許可された値 (254、1、3、または 9) のいずれかです。
- 1ドルは4ドルそして2 ドルは 1000、925、または 850 のいずれかです。
その他の行はすべて無視されます。
注: これはサンプル出力と完全には一致しません。a) サンプル出力が目的の説明と一致していない(*) ため、b) コメントで 2 で始まる行は不要であると述べられているためです。
(*) 少なくとも、私が理解できる限りではそうです。あなたの説明は非常に不明瞭で、解釈が困難です。解読するのに数分かかりましたが、まだ正しいかどうかわかりません。あなたが求めているものは見た目よりもはるかに複雑なのか、奇妙に複雑な書き方をしているのかのどちらかです。