我有两个文件,我试图运行find/grep/fgrep。我一直在尝试几个不同的命令,试图得到如下结果:从文件b中找出文件a中的单词,并从文件a输出丢失的单词匹配
文件
hostnamea
hostnameb
hostnamec
hostnamed
hostnamee
hostnamef
文件B
hostnamea-20170802
hostnameb-20170802
hostnamec-20170802.xml # some files have extensions
020214-_hostnamed-20170208.tar # some files have different extensions and have different date structure
HOSTNAMEF-20170802
*有关文件 - 日期= 20170802 - 大多数都有这样的日期格式 - 一些有不同的日期格式*
FileA是我的控制文件 - 我想搜索整个单词hostnamea-f
和匹配hostnamea-f
在fileb中,并将来自filea
的不匹配项输出到终端上的输出中,以便在shell脚本中使用。
对于这个例子,我做到了hostnamee
不在fileb中。我想运行一个fgrep/grep/awk - 无论如何可以工作 - 并只输出filea中缺失的hostnamee
。
我可以得到这个工作,但它并不特别做我所需要的,如果我交换它,我什么也得不到。
[email protected]:/netops/backups/scripts$ fgrep -f filea fileb -i -w -o
hostnamea
hostnameb
hostnamec
hostnamed
HOSTNAMEF
很酷 - 我得到了File-B中的匹配,但是如果我尝试反转它,该怎么办?
[email protected]:/netops/backups/scripts$ fgrep -f fileb filea -i -w -o
[email protected]:/netops/backups/scripts$
我尝试了几个不同的命令,但似乎无法弄清楚。我使用-i来忽略大小写,-w匹配整个单词和-o
我找到了一些解决方法,但希望有一个更优雅的方法来做到这一点,使用单个命令awk,egrep, fgrep或其他。
[email protected]:/netops/backups/scripts$ fgrep -f filea fileb -i -w -o > test
[email protected]:/netops/backups/scripts$ diff filea test -i
5D4 < hostnamee
在我的真实情况下 - 上面的这个工作甚至不像上面的例子那样工作。我在文件名中也有 - 和_,并且它似乎没有给出与上述相同的结果。 –
你想'HOSTNAMEF'被认为是匹配'hostnamef'吗?即不区分大小写? – Yunnosch
是的 - 在这种情况下,一些备份文件的例子 - 在大写完成,而我的主机文件都是小写 - 所以HOSTNAMEF应=主机名 –