2017-06-09 35 views
-2

我在Linux平台上,需要完成我的任务或任何有关如何完成此任务的建议的命令需要帮助。根据另一个文件中的输入搜索文件的命令

我有2个文本文件,第一个文件有一个ID的列表(日志ID),第二个文件是一个日志文件,其中包含具有日志ID的各种活动的条目。

基本上,我想从第一个文件中选择一个日志标识并搜索这个日志标识是否存在于第二个文件中。

第一个文件有15000个日志ID,手动无法检查每个文件。

这里是我的编码尝试:
grep -q "LogID: 1005534" logfile.txt && echo "yes" || echo "no"

但如何与所有日志-ID的我不得不重复命令?

这里是LOGID和实际的日志文件

enter image description hereenter image description here

+0

我得到了下面的命令'grep的-q“LOGID:1005534” LOGFILE.TXT &&回声“是” ||回声“不”。但是如何使用我拥有的所有log-id迭代命令。 – sady

+2

堆栈溢出是一个地方,如果遇到*特定问题*,可以请求其他人帮助您使程序正常工作。对于我们来说,你需要编写一个程序。预计您至少会付出努力,而不是仅仅在此倾销您的需求,并等待解决方案弹出。 – Borodin

+0

请提供您的文本信息作为问题中的文本,而不是图片。 – Yunnosch

回答

1

我觉得自己的努力,用grep,是相当接近。基于
就在这个答案演示
结束引用这两个文件(一个由MCVE你本来不错...),我建议把三个列表,使用:

  • 正面:grep -of Ids.txt Logfile.txt | sort -u
  • 负一:grep -vf Ids.txt Logfile.txt | grep -o "LogID: .*" | sort -u
  • 负b:grep -o "LogID: .*" Logfile.txt >InIDs.txt && grep -vf InIDs.txt IDs.txt | sort -u

注:

  • 如果系统中有两个“排序”程序,例如Windows和GNU,确保给予完整路径二进制使用GNU版本,即;窗口排序不知道-u选项。
  • 这些文件有UNIX行结尾(只有LF,而不是CRLF),这很重要。
  • 假设:字符串“LOGID:DDDDDD”仅发生在线路
    结束(这个假设可以稍微放松,也许取出,用更复杂的正则表达式)

环境IDs.txt
(注意到载于LOGFILE.TXT的1005539,1005540 ):

LogID: 1005534 
LogID: 1005535 
LogID: 1005536 
LogID: 1005537 
LogID: 1005538 
LogID: 1005539 
LogID: 1005540 

环境LOGFILE.TXT
(注意1005548 所含的ID。TXT和具有相同ID的行):

blabla LogID: 1005534 
bloblo LogID: 1005536 
blaablaa LogID: 1005534 
blublu LogID: 1005537 
blibli LogID: 1005548 
bluubluu LogID: 1005537 
bleble LogID: 1005538 

输出,阳性:

LogID: 1005534 
LogID: 1005536 
LogID: 1005537 
LogID: 1005538 

输出,负一
(那些在LOGFILE.TXT但不是在IDs.txt):

LogID: 1005548 

输出,负b
(那些在IDs.txt但不是在LOGFILE.TXT):

LogID: 1005535 
LogID: 1005539 
LogID: 1005540 
1

1:获取唯一ID fr file1。对于每个ID,在文件2中搜索它

sort -u file1 | while read ID; do 
    grep -q $ID file2 && echo $ID: YES || echo $ID: no # costly operation & repetitive 
done 

2:如果您有很多条目(特别是在file2上)。与众不同的是,获得这两个文件的所有ID和比较笔记

sort -u file1 > /tmp/f1 
grep -i target.*logID file2 |sed 's/.*target://' |sort -u > /tmp/f2 # one-pass 
diff -y /tmp/f1 /tmp/f2 | grep -q ">" # YES list 
diff -y /tmp/f1 /tmp/f2 | grep ">" # no list 
+0

尊重,这是很好的替代方法。 – Yunnosch

相关问题