Сравните два файла с разным макетом на основе значения ключа и извлеките вывод в третий файл

используйте команду who(man)для пользователей, которые в данный момент вошли в систему.

Редактировать :Если вам нужны прошлые входы в систему, используйте команду last(man)

last --since today

0
29.10.2020, 11:54
2 ответа

Это можно сделать с помощью следующей awkпрограммы:

awk -F'|' 'FNR==NR{key1[FNR]=$1;key2[FNR]=$4;next}
           {if ($2!=key2[FNR] || $5!=key1[FNR]) print}' file2.txt file1.txt 
  • Это сначала проанализирует file2.txtи построит на -строковые списки столбцов 1 и 4. Мы можем видеть, что мы анализируем первый файл в списке аргументов, утверждая, что FNR, на -счетчик строк файла, равен NR, общему счетчику строк (. Но обратите внимание, , что это сломается, если file2.txtкогда-либо будет пустым! ).
  • Затем при разборе file1.txtдля каждой строки столбцы 2 и 5 будут сравниваться со списками, заполненными при обработке file2.txt, и, если они не совпадают, выводить строку.
0
18.03.2021, 22:54

Вы можете попробовать что-то вроде:

while read -r line;
do
myvar2=$(line | awk '{ print $2}')
if grep -Fxq "$myvar" file2
then
# code if found
else
# code if not found
fi
myvar5=$(line | awk '{ print $5}')
if grep -Fxq "$myvar5" file2
then
# code if found
else
# code if not found
fi
done < file1

Код не проверен. Это должно считываться построчно из файла1, отдельного столбца2 и отдельного столбца5, awk '{ print $2 $5}'следует читать 2 и 5 и проверять, существует ли myvar в файле2

0
18.03.2021, 22:54

Теги

Похожие вопросы