공백으로 구분된 열이 있는 세 파일의 데이터를 병합하고 싶습니다.
첫 번째 파일:
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
필요한 출력 파일을 생성하기 위해 다음 프로세스를 구현하고 싶습니다. 반복(첫 번째 파일의 각 루프에 대해):
- 첫 번째 파일에서 루프 번호를 읽습니다.
grep
(검색) 두 번째 파일에서 루프 번호를 검색하고 해당 줄을 추출/캡처합니다. (이 문제를 해결하려고 하다가 아래와 같이 해당 줄을 이라는 임시/중간 파일에 저장했습니다output_1
.)- 이 행에서 mux_select 값을 추출합니다.
grep
세 번째 파일의 mux_select 값에 대해 해당 행을 추출/캡처합니다. (이 문제를 해결하려고 할 때 해당 줄을 이라는 임시/중간 파일에 저장했습니다output_2
.)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