2012-11-21 4 views
0

SQL 데이터가있는 두 개의 파일이 있는데 두 번째 파일에서 일치하는 코스 코드와 학생 번호가있는 데이터를 제거하고자합니다. 파일은 다음과 같이 찾고 있습니다 :다른 파일의 값을 비교하고 일치하지 않는 행을 유지하십시오.

파일 1 :

INSERT INTO RegisteredCourses (course,student) VALUES ('BKE974','3941021693'); 
INSERT INTO RegisteredCourses (course,student) VALUES ('BKE974','5044463260'); 
INSERT INTO RegisteredCourses (course,student) VALUES ('BKE974','5923001715'); 
INSERT INTO RegisteredCourses (course,student) VALUES ('DQY359','7539643746'); 
INSERT INTO RegisteredCourses (course,student) VALUES ('DQY359','9604636424'); 
INSERT INTO RegisteredCourses (course,student) VALUES ('DQY359','9649249670'); 

파일 2 :

INSERT INTO Queue (course,student,registrationDate) VALUES ('BKE974','3941021693','1354811709'); 
INSERT INTO Queue (course,student,registrationDate) VALUES ('BKE974','5044463260','1378352712'); 
INSERT INTO Queue (course,student,registrationDate) VALUES ('BKE974','3421728825','1368144500'); 
INSERT INTO Queue (course,student,registrationDate) VALUES ('DQY359','7421758823','1375874278'); 
INSERT INTO Queue (course,student,registrationDate) VALUES ('DQY359','9604636424','1374587707'); 
INSERT INTO Queue (course,student,registrationDate) VALUES ('DQY359','9649249670','1370542279'); 

내가 그 과정 학생 필드는 처음 두에 일치되도록 파일을 조작했고 파일의 마지막 두 행 첫 번째 줄에서는 동일한 과정 (BKE974)과 학생 (3941021693) 값을 볼 수 있습니다. 이 값이 일치하지 않으면 File2의 전체 줄을 새 파일로 인쇄하려고합니다.

필자는 bash 스크립팅을 사용하여 이것을 알아 내려고 노력해 왔으며 bash에 대해 더 많이 배우려고하기 때문에 bash 솔루션을 좋아합니다. grep, awk 및 cut을 사용하여이 문제를 해결하려고 시도했지만 bash에 대한 지식이 부족합니다. P

EDIT : 따라서이 두 행을 새로운 파일 :

INSERT INTO Queue (course,student,registrationDate) VALUES ('BKE974','3421728825','1368144500'); 
INSERT INTO Queue (course,student,registrationDate) VALUES ('DQY359','7421758823','1375874278'); 

답변

1

여기 GNU awk를 사용하여 하나의 방법 :

awk -F "[()]" 'FNR==NR { a[$(NF-1)]++; next } !(gensub(/(.*),.*/,"\\1","g",$(NF-1)) in a)' File1 File2 

결과 :

INSERT INTO Queue (course,student,registrationDate) VALUES ('BKE974','3421728825','1368144500'); 
INSERT INTO Queue (course,student,registrationDate) VALUES ('DQY359','7421758823','1375874278'); 
+0

정말 대단합니다. 너는 신이다 :). 해독하는 데 몇 년이 걸릴 것이지만 작동합니다. D – span

1

는 시도이

#!/bin/bash 
    while read line 
    do 
      x=`echo "$line" | sed -n "s/.*VALUES (//p" | sed -n "s/);//p"`; 
      sed -i '/'$x'/d' file2.txt 
    done<file1.txt 
+0

감사합니다. 이것은 고유 한 코스 및 학생으로 보이는 목록을 인쇄합니다. 삽입 문을 완벽하게 유지하기 위해 전체 줄을 인쇄하고 싶습니다. – span

+0

이것은 값을 인쇄 할뿐만 아니라 값을 인쇄합니다. file2.txt를 확인하십시오. 발견 된 모든 항목도 삭제됩니다. – Konza

+0

echo $ x를 제거했습니다. 필요하지 않기 때문에 ... 그리고 무엇을 인쇄 하시겠습니까 ?? 나는 당신을 얻지 못했다 – Konza

관련 문제