0

SQLデータを含む2つのファイルがあり、コースコードと学生番号が一致する2番目のファイルのデータを削除したいと思います。ファイルは次のようになっています。

ファイル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');

ファイルを操作して、ファイルの最初の2行と最後の2行でコースフィールドと学生フィールドが一致するようにしました。最初の行では、同じコース(BKE974)と学生(3941021693)の値を持っていることがわかります。これらの値が一致しない場合は、File2から新しいファイルにその行全体を印刷したいと思います。

私はこれを理解するためにいくつかのbashスクリプトを使用しようとしてきましたが、bashについてもっと学ぼうとしているので、bashソリューションが大好きです。これを解決するためにgrep、awk、cutを使用してみましたが、bashに関する知識が非常に不足しています:P

編集:したがって、最終的には、次の2つの行が新しいファイルに出力されるはずです。

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

2 に答える 2

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
于 2012-11-21T12:50:03.907 に答える
1

使用する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');
于 2012-11-21T14:12:58.013 に答える