как найти значение из одного файла (IP адрес) в другом файле (IP пробел имя пользователя)

BASH + AWK — поиск содержимого одного файла в другом и вывод значения рядом с ним

Это мне понадобилось, чтобы решить задачу смены пароля пользователя Samba через подключение Putty. При этом у меня есть файл содержащий соответствия IP адресов и логинов пользователей (у меня система такая: один компьютер — один пользователь).

<strong>cat '/home/tvs/scripting/15.txt' | while read LINE ; do awk "/^$LINE\ /{print \$2}" '/home/tvs/scripting/userip.txt'; done</strong>

разберем этот скрипт:

cat ‘/home/tvs/scripting/15.txt’ — вывести содержимое файла 15.txt

while read LINE ;    # в конвеере на вход команды BASH чтения строк из конвеера:

do # начало действий цикла BASH

awk «/^$LINE\ /{print \$2}» ‘/home/tvs/scripting/userip.txt’;

done # конец действий цикла BASH

/^ — ^ это спецсимвол, поэтому он экранируется с помощью символа /

$LINE — переменная куда была считана строка с помощью while read LINE (строка из файла /home/tvs/scripting/15.txt)

/{print \$2}» — вывод значения 2го столбца файла /home/tvs/scripting/userip.txt

/{ — экранирование спецсимвола {, чтобы сказать что это относится к AWK, а не BASH

\$2} — экранирование спецсимвола $2 (переменной AWK, содержащей значение 2го столбца (или другими словами 2е значение текущей в строке

например в файле с содержимым: 127.0.0.1     localhost

выведет localhost 

)

{} — в AWK действие, которое должно быть выполнено при нахождении нужного значения записывается в таких скобках, чтобы BASH не спутал их со своими вложенными запусками дочерних процессов в консоли эти скобки экранированны символами \

 

Таким образом этот файл выведет:

значение 2го столбца в файле /home/tvs/scripting/userip.txt, найденное в результате получения из файла /home/tvs/scripting/15.txt строки, содержащей IP адрес.

Причем, в файле /home/tvs/scripting/userip.txt будет найдена строка, совпадающая со значением IP адреса из  файла /home/tvs/scripting/15.txt

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *