추가 분석을 위해 FIX 메시지 구문 분석

추가 분석을 위해 FIX 메시지 구문 분석

현재 통화(tag55)와 가격(tag133)을 표시하는 2개의 열을 가져오기 위해 FIX 메시지를 구문 분석하려고 하는데 메시지의 필수 부분이 열로 분리되지 않은 것 같기 때문에 "awk"를 사용하는 데 어려움이 있습니다. (굵은 글씨로 표시) 참고용입니다. 이를 달성하는 방법에 대한 아이디어가 있습니까?

FIX log example:
03:55:16.128 incoming           20180528-07:55:16.015           8587130         11891           8587030         S                  **8=FIX.4.29=013535=S49=IUAT2Feed56=FixServer50=IUAT2Feed_Offers34=858713052=20180528-07:55:16.015117=055=NOK/SEK7225=7133=1.0735135=2100000010=159**
03:55:16.128 incoming           20180528-07:55:16.015           8587131         11891           8587030         S                  **8=FIX.4.29=013435=S49=IUAT2Feed56=FixServer50=IUAT2Feed_Offers34=858713152=20180528-07:55:16.015117=055=USD/CNH7225=2133=6.3872135=300000010=110**

원하는 출력:

NOK/SEK 1.0735
USD/CNH 6.3872

답변1

  perl -F= -pale '$_ = sprintf "%.7s %.4f", @F[-5,-3]'   fix.log

¶ 작동 방식:

 °  split each line as it comes on equal to sign. Store the split values in the array @F

 °  counting from the end of the array @F, the last but 4th  and last but 2nd fields are what we need.

 °  we require the 7 chars and accuracy upto 4 digits.

 °  stuff these in $_ and -p option auto prints it. 

답변2

다음 내용이 awk도움이 될 수 있습니다.

awk -F"=" '{sub(/[0-9]+/,"",$(NF-4));print $(NF-4),$(NF-2)+0}' OFMT="%.05g"  Input_file

답변3

awk를 사용하면 다음과 같이 할 수 있습니다.

$ awk -F= '{for (i=1;i<=NF;i++) if($i ~ "NOK" || $i ~ "USD"){print $i,$(i+2)}}' input_file | awk '{gsub(/[0-9]/,"",$1)}1'
NOK/SEK 1.0735135
USD/CNH 6.3872135

관련 정보