Вот очень простой, несколько грубый awk
скрипт для выполнения чего-то, очень похожего на то, что вы, похоже, описываете:
#!/usr/bin/awk -f
{ if ($1 in seenbefore) {
printf( "%s\t%s\n", $1, seenbefore[$1]);
printf( "%s\t%s\n", $1, FILENAME);
}
seenbefore[$1]=FILENAME;
}
Как вы можете надеяться, можно предположить, что мы делаем только создание ассоциативногомассив каждого значения, которое вы найдете в первом столбце / поле (установите FS
в специальном блоке BEGIN
, чтобы изменить разделитель поля ввода ... для тривиально наивной формы поддержки CSV).При обнаружении дубликата мы распечатываем дубликаты, файл, в котором мы видели их ранее, и текущее имя файла.В любом случае мы затем добавляем / обновляем массив с именем текущего файла.
Используя больше кода, вы можете сохранять и печатать номера строк каждого, добавлять кортежи имени файла / номера строки в список и перемещать все выходные данные.в END
блок, где вы суммируете его в более кратком формате и т. д.
Для всего этого я бы лично перешел на Python, где типы данных богаче (фактические списки и кортежи довольночем объединять их в строки или встроенные массивы и массивы), и у меня был бы доступ к гораздо большей мощности (настоящий синтаксический анализатор CSV, который может обрабатывать различные варианты цитируемых CSV и альтернативных разделителей, и где получение отсортированных результатов тривиально легко).
Тем не менее, это, мы надеемся, поможет вам встать на правильный путь.