Как сканировать строку условного соответствия и цикл, если они совпадают

#bash #shell #unix #sh

Вопрос:

У меня есть 2 файла,большой и маленький с разделителями»;».

 old_file
    Apple;aaa@abc.com
    Banana;bbb@abc.com
    carrot;ccc@abc.com


new File  
Banana;new@abc.com
 

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

Мой код


 #Variables
name_old=`awk -F ";" '{print $1} {$temp}`; 
email_old=`awk -F ";" '{print $2} {$temp}`;
name_new=`cat 'smallfile' | awk -F ";" '{print $1}'`;
email_new=`cat 'smallfile' | awk -F ";" '{print $2}'`;


///
if #grep -wq $name_new <<< $name_old
[[ "$name_new" == "$name_old" ]]
then
echo "store the matched value email in a variable"
else
echo "store the unmatched value email in a variable"
fi  



sample Output can be stored in a variable.
aaa@abc.com  
new@abc.com--->matching record so updated email  
ccc@abc.com
 

Может ли кто-нибудь, пожалуйста, просмотреть и обновить, если что-то пойдет не так?
Я новичок в написании сценариев оболочки, но пытаюсь 🙂

Ответ №1:

awk является более подходящим инструментом для этого.

 awk 'BEGIN {FS=OFS=";"} NR==FNR {map[$1]=$2; next} $1 in map {$2=map[$1]} 1' newfile oldfile

Apple;aaa@abc.com
Banana;new@abc.com
carrot;ccc@abc.com
 

Комментарии:

1. Каковы здесь переменные..не могли бы вы, пожалуйста, объяснить свое решение.

2. Это делается для получения того же результата, что и в вашем sample Output . Вы можете прочитать некоторые основные инструкции awk tutprial.

3. Могу ли я использовать переменные вместо файла?

4. Что содержат эти переменные? У вас уже есть данные в файлах, так почему бы не использовать их непосредственно из файла?

5. Эти файлы должны служить примером для понимания. Я уже извлек необходимые данные в переменных(в моем коде), поэтому мне нужно только выполнить цикл, чтобы соответствующие данные имели обновленный идентификатор электронной почты, а несопоставимые данные использовали исходный идентификатор.