LINUX.ORG.RU

Замена hash на pass

 , , ,


0

1

Есть 2 файла со следующим содержимым:

1.txt - email hash
2.txt - hash pass

Необходимо получить файл 3.txt, в котором будут записаны email и pass, соответствующий хэшу. Хотелось бы реализовать подобное на bash с помощью awk, sed или grep.

Пока представляю такой порядок действий:

1.Читаем строку из файла 1.txt, записываем email в переменную $email, hash в переменную $hash

2.Ищем строку в файле 2.txt содержащую $hash, достаем pass

3.Записываем в файл 3.txt строку с pass и соотвествующим email.

На данный момент удалось только это:

-назначаем переменную $email

email=$(cat 1.txt | awk ‘{print $1}’)

-назначаем переменную $hash

hash=$(cat 1.txt | awk ‘{print $1}’)

а вот дальше пока ничего не получается, буду благодарен за любой совет)

#!/usr/bin/env bash
declare -A a
while read hash pass; do
        a["$hash"]=$pass
done < 2.txt
while read email hash; do
        pass=${a["$hash"]}
        echo "$email:$pass"
done < 1.txt
vodz ★★★★★
()
Ответ на: комментарий от Jini

Круть) работает!

Команда отработала как нужно) разбираюсь что и как делалось)

join -1 2 -2 1 <(sort -k 2 1.txt) <(sort 2.txt) | cut -d \ -f 2,3 > 3.txt

sort -k 2 1.txt - сортирует строки по второму полю из файла 1.txt sort 2.txt - сортирует строки по первому полю, т.к не указана опиция, из файла 2.txt

cut -d \ -f 2,3 - изменяем разделитель полей на пробел? делаем выборку по 2 и 3 полям.

join - новая для меня команда, пока не понимаю как работает, изучаю)

Спасибо огромное!

metasploit
() автор топика
Ответ на: Круть) работает! от metasploit

Команда отработала как нужно) разбираюсь что и как делалось)

Это не команда, а однострочный скрипт из набора команд, не описанных в вашем пожелании «хочу на bash/awk/sed/grep».

vodz ★★★★★
()
Ответ на: комментарий от vodz

Извините, что неправильно назвал однострочный скрипт командой)

Компактность скрипта вызывает просто восхищение! А результат полностью соответствует поставленной задаче. Пожелание было основано на имеющихся скромных познаниях о командах, а о существовании «join» не знал до сегодняшнего дня, виноват((( Спасибо за помощь)

metasploit
() автор топика

А результат полностью соответствует поставленной задаче.

Ну это при неназванном условии: нет пропущенных/лишних хешей, иначе всё уедет. В моём скрипте такой проблемы нет.

vodz ★★★★★
()
Последнее исправление: vodz (всего исправлений: 1)
Ответ на: комментарий от vodz

Извините) В результате работы вашего скрипта есть строки, содержащие хеши тоже.

Разница между результатами работы скрипта, предложенного Jini, и вашим в том, что в первом варианте строки отсортированы по второму полю, и все строки с хешеми расположены рядом, в вашем варианте строки отсортированы по первому полю(email) и строки с хешеми разбросаны. но это совсем не критично) главное, что оба варианта подставляют к нужному email соответствующий pass. Спасибо)

metasploit
() автор топика

Извините) В результате работы вашего скрипта есть строки, содержащие хеши тоже.

Что вы этим хотите сказать? Это же условие задачи — найти их соответствие.

в вашем варианте строки отсортированы по первому полю(email)

Нет. У меня ничего не сортируется, а идёт заполнение массива при однократном чтении исходного файла, а при чтении второго - происходит выборка.

vodz ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.