Сравните 2 файла, разделенных запятыми, и выведите разницу

Вот Perl-решение:

$ perl -pe 's/(\d+:.*?)(?=\d+:|$)/$1\n/g' file
random_string
83: some words 
45: large error report 
326: send emails to certain peple

random_string
34: some words 
143: job success

Пояснение

  • (\d+:.*?):соответствует одному или нескольким числам (\d+), за которыми следует :, а затем наименьшая строка (?в .*?делает ее не-жадной, она остановится, как только появится первая найдено совпадение ), соответствующее остальной части регулярного выражения. Здесь это будет продолжаться до части, описанной ниже.
  • (?=\d+:|$):(?=foo)называется положительным прогнозом . Он будет совпадать, но то, что совпало, не будет включено в фактический результат. Таким образом, bar(?=foo)будет соответствовать всем случаям bar, за которыми следует foo. Здесь мы ищем либо строку чисел, за которой следует :(\d+:), либо конец строки ($).

Теперь оператор подстановки заменит все вхождения первого шаблона на себя и новую строку, что должно дать вам желаемый результат.

0
09.10.2019, 00:49
2 ответа

с помощью Миллера(https://github.com/johnkerl/miller)можно запустить

mlr --headerless-csv-output --csv join --lp l_ --rp r_ -f input_01.csv -j Column2 then \
    cut -f Column2,l_Column3,r_Column3 then \
    filter '$l_Column3!=$r_Column3' \
input_02.csv

для получения

Demopod2,<none>,20fd5948a80c5b06989f34b1c23a8e64afb7943e
Demopod4,ca9802f0636c23d20daad17498b26df000205626,551fbe73e835528da8269bac3652c6a64ecf4097

Некоторые примечания:

  • join --lp l_ --rp r_ -f input_01.csv -j Column2для установки соединения и имени суффикса поля вывода
  • cut -f Column2,l_Column3,r_Column3для извлечения столбца 2 и левого и правого столбца 3
  • filter '$l_Column3!=$r_Column3'для фильтрации всех строк, где левый столбец 3 не равен правому столбцу 3
0
28.01.2020, 02:29
awk -F',' '{
  if (NR==FNR) a[$1$2]=$3
  else if (a[$1$2]!="" && a[$1$2]!=$3) print $2","a[$1$2]","$3
}' file1 file2

Когда первый файл будет обработан, сохраните значение третьего поля в массиве aс первым и вторым полем в качестве ключа.

При обработке второго файла сравните, существует ли не -пустое значение массива для ключа, который не соответствует значению третьего поля. Если это так, напечатайте второе поле, значение массива и третье поле.

2
28.01.2020, 02:29

Теги

Похожие вопросы