2014-12-11 2 views
-1

Я буквально был в этом в течение 5 часов, у меня есть загрузочный ящик на моем устройстве, и у меня, к сожалению, нет -X в grep, чтобы облегчить мою жизнь.duplicate grep output при сравнении двух файлов

изменить;

У меня есть два списка оба из них имеют MAC-адресов, по существу, я просто хотел добиться автономного макинтош поиска адреса, так что я не должен продолжать смотреть его онлайн

list.txt имеет поставщика макинтош префикс Конечно, это не полный список, но только для примера

00:13:46 
00:15:E9 
00:17:9A 
00:19:5B 
00:1B:11 
00:1C:F0 

сканирования будет иметь список различного MAC-адреса, неизвестный, какой поставщик они идут. Какими будут полные MAC-адреса. когда когда-либо есть совпадение, я хочу, чтобы строка в сканировании выводилась.

В значительной степени он делает это, но выводит все из файла сканирования, а затем выводит соответствующий результат в конце и вызывает дублирование. Я попробовал sort -u, но это не влияет на то, что есть два разных вывода из двух разных методов, поэтому я говорю, что это потому, что он мгновенно выводит файл сканирования, в котором есть все, а через пару секунд он будет выведите соответствующий.

От поисков я наткнулся на эту

#!/bin/bash 


while read line; do 

grep -F 'list' 'scan' 

done < list.txt 

который отображает дубликата результат, когда/если он найден, выход в значительной степени вторя мой файл сканирования затем отображающее подходящий шаблон, это Создание дубликатов

Эта меня разочаровывает, что я не нашел решение после того, как щелкнул по всем ссылкам в google до страницы 9.

Пожалуйста, помогите мне.

+1

Можете ли вы объяснить, что это такое и что вы хотите? Вы можете поставить его перед разделом 'From search' ... – beroe

+0

Просьба поделиться образцом ввода' list.txt', а также 'scan', чтобы мы могли лучше понять, что может произойти. – fedorqui

+0

Хорошо, я редактирую свой ОП, надеюсь, будет легче понять. – andyADD

ответ

0

Я не знаю, поддерживает ли это Busybox sed, но это должно быть легко сделать в Awk или Perl, а затем.

Создать sed скрипт для печати строк из file2 которых покрыто префиксом в file1 пути преобразования каждой строки в file1 в команду sed напечатать текст, соответствующий регулярное выражение:

sed 's%.*%/&/p%' file1 | sed -n -f - file2 

То же самое в Awk:

awk 'NR==FNR { a[++i]="^" $0; next } 
    { for (j=1; j<=i; ++j) if ($0 ~ a[j]) print }' file1 file2 
+0

Эй, извините за поздний ответ, к сожалению, sed дает мне эту ошибку «sed: can not open» - ': Нет такого файла или каталога «Я также удалил» - между -f и file2, но дает мне - неподдерживаемую команду. Я также попробовал команду awk, и он дал мне тот же результат, когда он печатает весь список MAC-адреса, а затем в конце списка он печатает дубликат, который он находит. – andyADD

+0

Попробуйте временный файл. Но ваши симптомы звучат так, как будто что-то еще не так. У вас есть возврат каретки DOS в любом из входных файлов? – tripleee

+0

, если честно, я не уверен, что вы подразумеваете под «возврат каретки» – andyADD

0

Ok ребята я сделал вложенный цикл (вероятно, очень эффективным в), но я получил это работает печать соответствия MAC-адресов с помощью этой

#!/usr/bin/bash 

for scanlist in `cat scan | cut -d: -f1,2,3` 
do 

for listt in `cat list` 
do 

if [[ $scanlist == $listt ]]; then 

grep $scanlist scan 

fi 

done 
done 

Если кто-то может сделать это более элегантным, но он работает для меня пока. Я думаю, что проблема у меня была в одном списке, содержащем только 00:11:22, в то время как мой другой список содержал 00: 11: 22: 33: 44: 55, поэтому я разрезал его в своем списке сканирования так же, как и в моем другом списке. Таким образом, это выводит только совпадения, а не делает дубликат вывода.

Смежные вопросы