두 파일 간의 서로 다른 열 값을 비교하고 일치하면 서로 다른 열 값을 인쇄합니다.

두 파일 간의 서로 다른 열 값을 비교하고 일치하면 서로 다른 열 값을 인쇄합니다.

File1에는 다음과 같은 데이터가 있으며 이는 필드 구분자입니다.

1,T_EXIT,9053.0,10325.0,, ,  
2,V_TURN,120.0,11334.0,,GOAL,RECK
3,Q_ENTRY,122.0,190.0,, ,
4,Q_ENTRY_RUN,130.0,569.0,, ,

파일 2에 데이터가 있음

SYNC CLK
T_EXIT OPEN 
Q_ENTRY CLOSE ALLOW
CORE_T MODE

file2의 Column1을 File1의 Column2와 비교하고 EXCAT MATCH가 존재하는 경우 file2의 6열에 있는 file2에서 2열을 복사하고 1의 7열에 있는 file2에서 3열을 복사하고 싶습니다.

나는 출력을 다음과 같이 원한다:

1,T_EXIT,9053.0,10325.0,,OPEN,
2,V_TURN,120.0,11334.0,,GOAL,RECK 
3,Q_ENTRY,122.0,190.0,,CLOSE,ALLOW
4,Q_ENTRY_RUN,130.0,569.0,, ,

아래 코드를 시도했지만 file2에서 두 개의 열 값 "column1"과 "column2"를 함께 저장하는 방법을 알 수 없습니다.

awk 'NR==FNR{A[$1]=$2;B[$1]=$3;next} ($1 in A) {$6=A[$1]; $7=B[$1]}1' file2 FS=, OFS=, file1 > test

답변1

$ awk 'NR==FNR{ data[$1]=$2 OFS $3; next }
  ($2 in data){ sub(/[^,]*,[^,]*$/, ""); $0=$0 data[$2] }1' OFS=, file2 FS=, file1

1,T_EXIT,9053.0,10325.0,,OPEN,
2,V_TURN,120.0,11334.0,,GOAL,RECK
3,Q_ENTRY,122.0,190.0,,CLOSE,ALLOW
4,Q_ENTRY_RUN,130.0,569.0,, ,

사용될 때 sub(/[^,]*,[^,]*$/, ""), 우리가 볼 때데이터이전에 연결된 배열을 삭제한 다음 file2의 해당 키 값을 $0= $0 data[$2].

관련 정보