Объединить строки в разных файлах при условии их совпадения
Есть текстовый файл следующего вида: file1
'alex';
'andrii';
'roman';
'anton.pe';
'nikolai';
file2
GRANT ALL PRIVILEGES ON `base1`.* TO 'alex';
GRANT ALL PRIVILEGES ON `base1`.* TO 'andrii';
GRANT ALL PRIVILEGES ON `base1`.* TO 'roman';
GRANT ALL PRIVILEGES ON `base1`.* TO 'anton';
GRANT ALL PRIVILEGES ON `base1`.* TO 'nikolai';
Задача объединить эти данные вместе, условно если в строке с file2 есть значение с file1 то к значению с file1 в конец строки записать поле с file2, что бы получилось что-то подобное.
'alex'; GRANT ALL PRIVILEGES ON `base1`.* TO 'alex';
Я пробовал использовать команду read, но так и не мог написать условие для обработки данных.
while IFS= read -r line
do
if [] then
fi
done < 1.tx
Ответы (2 шт):
Автор решения: Sergey
→ Ссылка
Как-то тк, возможно:
File=./f1.txt
while read line1
do
cat f2.txt | while read line2
do
if [[ $line2 == *"$line1"* ]];
then
echo "$line1 $line2"
fi
done
done < $File
Запуская этот скрипт получим:
$ bash script.sh
'alex'; GRANT ALL PRIVILEGES ON `base1`.* TO 'alex';
'andrii'; GRANT ALL PRIVILEGES ON `base1`.* TO 'andrii';
'roman'; GRANT ALL PRIVILEGES ON `base1`.* TO 'roman';
'nikolai'; GRANT ALL PRIVILEGES ON `base1`.* TO 'nikolai';
$
Автор решения: aleksandr barakin
→ Ссылка
к примеру, так:
$ join -2 7 -o "1.1 $(echo 2.{1..7})" <(sort file1) <(sort file2)
результат выполнения на основе приведённого в вопросе содержимого файлов:
'alex'; GRANT ALL PRIVILEGES ON `base1`.* TO 'alex';
'andrii'; GRANT ALL PRIVILEGES ON `base1`.* TO 'andrii';
'nikolai'; GRANT ALL PRIVILEGES ON `base1`.* TO 'nikolai';
'roman'; GRANT ALL PRIVILEGES ON `base1`.* TO 'roman';
здесь:
join опции первый.файл второй.файл— собственно объединение строк из двух файлов;-2 7— из второго файла отбирать только седьмое поле (по умолчанию разделитель полей — пробел);-o формат— выводить результат в требующемся формате. например:1.2— из первого файла вывести второе поле;"1.1 $(echo 2.{1..7})"— оболочкой преобразовывается в строку"1.1 2.1 2.2 2.3 2.4 2.5 2.6 2.7". как формат означает: взять из первого файла первое поле, из второго взять первое, второе, ... и седьмое;программа <(команда)— передача программе файлового дескриптора, в который записывается результат выполнения команды.