匹配两个文件中的column1和column2



我有两个文件file1.csv&file2.csv

file1.csv
Test1;Test3
Test1;Test3
Test1;Test3
Test1;Test3
Test1;Test3
Test1;Test3
Test1;Test3
Test7;Test4
Test7;Test4
Test7;Test4
Test7;Test4
Test7;Test4
Test7;Test4
Test7;Test4

file2.csv
Test1;Test3;12345
Test1;Test3;12345
Test1;Test3;12345
Test1;Test3;12345
Test1;Test3;12345
Test1;Test3;12345
Test1;Test3;12345
Test7;Test4;12346
Test7;Test4;12346
Test7;Test4;12346
Test7;Test4;12346
Test7;Test4;12346
Test7;Test4;12346
Test7;Test4;12346

我正在尝试循环file1.csv,并在file2.csv中与之匹配,因为它会匹配,所以应该将输出打印到一个新文件中因此,如果两个文件中的column1和column2相同,则打印出一个新文件,但如果匹配,则将其限制为每个文件的3行。

awk 'NR==FNR{a[$1,$2];next}($1,$2 in a){print $0}' identicalValue.csv Originalvalues.csv | head -3

输出应为:

Test1;Test3;12345
Test1;Test3;12345
Test1;Test3;12345
Test7;Test4;12346
Test7;Test4;12346
Test7;Test4;12346

自file1.csv

Test1;Test3
Test1;Test3
Test1;Test3
Test1;Test3
Test1;Test3
Test1;Test3
Test1;Test3
Test7;Test4
Test7;Test4
Test7;Test4
Test7;Test4
Test7;Test4
Test7;Test4
Test7;Test4

等于file2.csv

Test1;Test3;12345
Test1;Test3;12345
Test1;Test3;12345
Test1;Test3;12345
Test1;Test3;12345
Test1;Test3;12345
Test1;Test3;12345
Test7;Test4;12346
Test7;Test4;12346
Test7;Test4;12346
Test7;Test4;12346
Test7;Test4;12346
Test7;Test4;12346
Test7;Test4;12346

在第1列和第2列中,它应该只在第1栏和第2栏中的每个匹配项上打印出file2.csv中的3个值

编辑: 由于OP在他/她的文件中控制了M个字符,因此添加此解决方案来处理它。

awk 'BEGIN{FS=";"} {gsub(/r/,"")} FNR==NR{a[$1,$2];next} (($1,$2) in a) && ++b[$1,$2]<=3' file1 file2


如果您想打印Input_file2的内容和Input_file1中的匹配线,请尝试以下操作,这也将使每列值的匹配计数仅为3

awk 'BEGIN{FS=";"} FNR==NR{a[$1,$2];next} (($1,$2) in a) && ++b[$1,$2]<=3'  file1  file2

上面每个索引只打印3个值,如果您想打印所有索引值,请尝试以下操作。

awk 'BEGIN{FS=";"} FNR==NR{a[$1,$2];next} (($1,$2) in a)'  file1  file2

输出如下。

Test1;Test3;12345
Test1;Test3;12345
Test1;Test3;12345
Test7;Test4;12346
Test7;Test4;12346
Test7;Test4;12346

最新更新