比较两个文件时重复grep输出

时间:2014-12-11 07:24:46

标签: grep openwrt

我已经在这里呆了5个小时了,我的设备上有busybox,不幸的是我没有-X grep来让我的生活更轻松。

编辑;

我有两个列表,它们都有mac地址,基本上我只想实现离线mac地址查找,所以我不必继续在线查找

list.txt有供应商mac前缀,当然这不是完整的列表,只是为了一个例子

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

扫描将包含他们去哪家供应商所不知道的不同mac地址的列表。这将是全长mac地址。当有匹配时,我希望输出扫描线。

它确实如此,但它从扫描文件中输出所有内容,然后在最后输出匹配的一个,并导致重复。我尝试排序-u,但它没有效果,好像两个不同的方法有两个不同的输出,我之所以这样说是因为它会立即输出包含所有内容的扫描文件,几秒后它会输出匹配的。

从搜索中我发现了这个

#!/bin/bash


while read line; do

grep -F 'list' 'scan'  

done < list.txt

显示重复结果/如果找到,输出几乎回显我的扫描文件然后显示匹配的模式,这就创建了重复

令我感到沮丧的是,在点击Google截至第9页的所有链接后,我还没有找到解决方案。

请有人帮帮我。

2 个答案:

答案 0 :(得分:0)

我不知道Busybox sed是否支持开箱即用,但在Awk或Perl中应该很容易做到。

创建一个sed脚本,通过将file2中的每一行转换为file1命令,打印file1sed前缀所涵盖的行打印该正则表达式的匹配项:

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

答案 1 :(得分:0)

好的家伙我做了一个嵌套for循环(可能非常有效)但是我得到它使用这个

打印匹配的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这就是为什么我在扫描列表上剪切它以使其长度与我的其他列表相同。所以这只输出匹配而不是重复输出。