고고도 풍선 데이터를 형식으로 작업하고 있습니다....
**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(Line Type Indicator) 설명 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
방법은 출력에서 선행 공백을 제거합니다.
이 해결 방법은 두 단계로 진행되는 것을 볼 수 있습니다. 선행 및 후행 별표를 제거하려면 위의 코드를 실행하고 에 저장한 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로 시작하는 줄을 원하지 않는다고 나와 있기 때문에 이는 예제 출력과 정확히 일치하지 않습니다.
(*) 적어도 제가 이해하는 한 최선을 다하겠습니다. 귀하의 설명은 매우 불분명하고 구문 분석하기 어렵습니다. 해독하는 데 몇 분이 걸렸지만 여전히 올바른지 확실하지 않습니다. 보이는 것보다 더 복잡해지길 원하거나 엄청나게 복잡한 방식으로 작성했습니다.