#bash #shell
#bash #оболочка
Вопрос:
У меня возникла проблема при сравнении выходных данных всех файлов passwd и shadow и при выводе как одинаковых, так и разных, используя только поле username
Я использую команду grep
пока это мой код
grep -f shadowfile.txt passwordfile.txt > same.txt
grep -Fxvf shadowfile.txt passwordfile.txt > diff.txt
Я ожидал, что same.txt чтобы иметь всех пользователей, но не иметь записи в diff one
Комментарии:
1. Опубликуйте несколько примеров файлов с ожидаемым результатом.
Ответ №1:
Способ, который я знаю, — использовать команду comm
awk -F':' '{ print $1 }' passwordfile.txt | sort > passwordfile.sorted
awk -F':' '{ print $1 }' shadowfile.txt | sort > shadowfile.sorted
comm -12 passwordfile.sorted shadowfile.sorted > same.txt
comm -3 a1 a2 passwordfile.sorted shadowfile.sorted | sed 's/[ t]*//' > diff.txt
Команда comm требует, чтобы входные данные были отсортированы первыми
Я использовал команду awk и sort для создания отсортированного списка имен пользователей во временных файлах
И, для diff.txt , sed в трубе предназначен для удаления зазоров и выступов с выхода
Ответ №2:
вы можете использовать эти команды:
awk -F : '{print $1}' passwd.txt shadow.txt |sort | uniq -u > diff.txt
awk -F : '{print $1}' passwd.txt shadow.txt |sort | uniq -d > same.txt
Комментарии:
1. как бы мне сделать так, чтобы он просто выполнял поиск и использовал имя пользователя в качестве параметра?
2. сначала он печатает пользователей обоих файлов, а затем сортирует их. Первая команда
uniq -u
печатает только уникальные файлы иuniq -d
печатает только повторяющиеся.3. и если я хочу распечатать полный путь, но использовать имя пользователя как способ проверки того, что у обоих одинаковое имя пользователя
4. что вы подразумеваете под полным путем?