Есть ли способ перебрать значения столбца, а затем проверить, присутствует ли он в другом месте?

Я создал 2 файла .csv, один из которых содержит исходные суммы md5 некоторых файлов в каталоге, а другой содержит суммы md5, рассчитанные в определенный момент.

md5_original.csv
----------

        $1                      $2  $3
7815696ecbf1c96e6894b779456d330e,,s1.txt
912ec803b2ce49e4a541068d495ab570,,s2.txt
040b7cf4a55014e185813e0644502ea9,,s64.txt
8a0b67188083b924d48ea72cb187b168,,b43.txt

etc.
md5_$current_date.csv
----------

        $1                      $2  $3
7815696ecbf1c96e6894b779456d330e,,s1.txt
4d4046cae9e9bf9218fa653e51cadb08,,s2.txt
3ff22b3585a0d3759f9195b310635c29,,b43.txt

etc.
* some files could be deleted when calculating current md5sums

Я хочу перебрать значения столбца $3 в md5_$current_date.csv и для каждого значения этого столбца проверить, существует ли он в md5_original.csv, и если да, то, наконец, сравнить его значение с $1.

Вывод должен быть:

s2.txt hash changed from 912ec803b2ce49e4a541068d495ab570 to 4d4046cae9e9bf9218fa653e51cadb08.
b43.txt hash changed from 8a0b67188083b924d48ea72cb187b168 to 3ff22b3585a0d3759f9195b310635c29.

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

Готово. Я думал, что это поможет людям лучше понять структуру, но я исправил ее, как вы предложили.

Zeek Liviu 17.05.2022 20:19
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
2
1
35
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я бы использовал GNU AWK для этой задачи следующим образом, пусть md5_original.csv контент будет

7815696ecbf1c96e6894b779456d330e {BLANK_COLUMN} s1.txt
912ec803b2ce49e4a541068d495ab570 {BLANK_COLUMN} s2.txt
040b7cf4a55014e185813e0644502ea9 {BLANK_COLUMN} s64.txt
8a0b67188083b924d48ea72cb187b168 {BLANK_COLUMN} b43.txt

и md5_current.csv содержание быть

7815696ecbf1c96e6894b779456d330e {BLANK_COLUMN} s1.txt
4d4046cae9e9bf9218fa653e51cadb08 {BLANK_COLUMN} s2.txt
3ff22b3585a0d3759f9195b310635c29 {BLANK_COLUMN} b43.txt

потом

awk 'FNR==NR{arr[$3]=$1;next}($3 in arr)&&($1 != arr[$3]){print $3 " hash changed from " arr[$3] " to " $1}' md5_original.csv md5_current.csv

выход

s2.txt hash changed from 912ec803b2ce49e4a541068d495ab570 to 4d4046cae9e9bf9218fa653e51cadb08
b43.txt hash changed from 8a0b67188083b924d48ea72cb187b168 to 3ff22b3585a0d3759f9195b310635c29

Объяснение: FNR — это номер строки в текущем файле, NR — это номер строки в глобальном масштабе, они равны только при обработке 1-го файла. При обработке 1-го файла я создаю массив arr, так что ключи — это имена файлов, а значения — соответствующие хэш-значения, next заставляют GNU AWK переходить к следующей строке, т. е. никаких других действий не предпринимается, поэтому отдых применяется только ко всем файлам, кроме первого. ($3 in arr) условие: текущий $3 один из ключей arr? Если это действительно так, я print объединяю текущее $3 (то есть имя файла) hash changed from строковое значение для ключа $3 из массива arr (это старое хеш-значение) to строку $1 (текущее хеш-значение). Если данное имя файла отсутствует в массиве arr, то никаких действий не предпринимается. Обновлено: добавлено исключение для хэша, который не изменился, как предложено в комментарии.

(проверено в gawk 4.2.1)

Другие вопросы по теме