我有两个文件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