한 파일을 읽고, 다른 파일에서 일치하는 데이터를 추출하고, 세 번째 파일에서 해당 콘텐츠를 가져오는 방법

한 파일을 읽고, 다른 파일에서 일치하는 데이터를 추출하고, 세 번째 파일에서 해당 콘텐츠를 가져오는 방법

공백으로 구분된 열이 있는 세 파일의 데이터를 병합하고 싶습니다.

첫 번째 파일:

CYCLE_NUMBER    output
---------------------
32                1
28                2

두 번째 파일:

DATALOG_OUTPUT    Time    CELL_TYPE    MUX_SELECT    CYCLE_NUMBER
-
DATALOG_OUTPUT    9500        0           0              32
DATALOG_OUTPUT    19500       1           4              12
DATALOG_OUTPUT    29500       2           8              28

세 번째 파일:

MUX_SEL    CUTNO
-
8        combo_1
0        combo_2
12       combo_3

내가 원하는 출력은

DATALOG_OUTPUT    Time    CELL_TYPE    MUX_SELECT    CYCLE_NUMBER    CUTNO
-
DATALOG_OUTPUT    9500        0           0              32         combo_2
DATALOG_OUTPUT    29500       2           8              28         combo_1

필요한 출력 파일을 생성하기 위해 다음 프로세스를 구현하고 싶습니다. 반복(첫 번째 파일의 각 루프에 대해):

  1. 첫 번째 파일에서 루프 번호를 읽습니다.
  2. grep(검색) 두 번째 파일에서 루프 번호를 검색하고 해당 줄을 추출/캡처합니다. (이 문제를 해결하려고 하다가 아래와 같이 해당 줄을 이라는 임시/중간 파일에 저장했습니다 output_1.)
  3. 이 행에서 mux_select 값을 추출합니다.
  4. grep세 번째 파일의 mux_select 값에 대해 해당 행을 추출/캡처합니다. (이 문제를 해결하려고 할 때 해당 줄을 이라는 임시/중간 파일에 저장했습니다 output_2.)
  5. paste이 두 줄은 최종 출력 파일에 기록됩니다.

나는 다음 스크립트를 작성하여 이것을 시도했습니다.

foreach cycle (`cat first_file | awk '{print $1}'`)
  set cycle_number = ` cat second_file | grep -w $cycle`
  echo $cycle_number >> output_1
  foreach mux (`cat output_1 | awk '{print $3}'`)
    set mux_select = ` cat third_file | grep -w $mux`
    echo $mux_select >> output_2
    paste output_1 output_2 >> output_file
  end
end

답변1

해결책은 다음과 같습니다.TxR:

코드는 다음 위치에 있습니다 join.txr.

CYCLE_NUMBER    output
---------------------
@(collect)
@cycno @(skip)
@  (next)
@  (skip)
DATALOG_OUTPUT @time @cellt @muxsel @cycno
@  (next)
@  (skip)
@muxsel @cutno
@(end)
@(output)
DATALOG_OUTPUT    Time    CELL_TYPE    MUX_SELECT    CYCLE_NUMBER    CUTNO
-
@  (repeat)
DATALOG_OUTPUT    @{time 11}  @{cellt 11} @{muxsel   13} @{cycno 11}@cutno
@  (end)
@(end)

달리기:

$ txr Join.txr 파일 1 파일 2 파일 3
DATALOG_OUTPUT 시간 CELL_TYPE MUX_SELECT CYCLE_NUMBER CUTNO
-
데이터 출력 9500 0 0 32 조합_2
DATALOG_OUTPUT 29500 2 8 28 조합_1

쿼리 시간 9500만:

$ txr -Dtime=9500 Join.txr 파일 1 파일 2 파일 3
DATALOG_OUTPUT 시간 CELL_TYPE MUX_SELECT CYCLE_NUMBER CUTNO
-
데이터 출력 9500 0 0 32 조합_2

쿼리 사이클 번호 28만:

$ txr -Dcycno=28 Join.txr 파일 1 파일 2 파일 3
DATALOG_OUTPUT 시간 CELL_TYPE MUX_SELECT CYCLE_NUMBER CUTNO
-
DATALOG_OUTPUT 29500 2 8 28 조합_1

관련 정보