сопоставить column1, column2 в двух файлах - PullRequest
1 голос
/ 27 февраля 2020

У меня есть два файла 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

Я пытаюсь l oop file1.csv и сопоставить с тем же в file2.csv, и, как он будет соответствовать, должен возьмите выходные данные и распечатайте их в новом файле, чтобы, если column1 и column2 в обоих файлах были идентичны, распечатайте новый файл, но ограничьте его тремя строками каждого, если они совпадают.

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 следует просто распечатать 3 значения из файла file2.csv для каждого совпадения в столбце 1 и столбце 2

1 Ответ

2 голосов
/ 27 февраля 2020

РЕДАКТИРОВАТЬ: Так как 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...