
我正在處理格式為 .... 的高空氣球數據。
**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
方法從輸出中刪除前導空格。
您可以看到此解決方案分兩步驟進行。要刪除開頭和結尾的星號,請執行上面的程式碼,儲存到 a 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
HTH。
答案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開頭的行。
(*) 至少,盡我所能理解。您的描述非常不清楚且難以解析...我花了幾分鐘才破解它,但我仍然不確定它是否正確。要么你想要的東西比看起來複雜得多,要么你以一種異常複雜的方式編寫了它。