我在Linux平台上,我需要帮助完成我的任务或任何有关如何完成此任务的建议。
我有2个文本文件,第一个文件有一个ID列表(日志ID),第二个文件是一个日志文件,其中包含带有日志ID的各种活动的条目。
基本上,我想从第一个文件中选择一个日志ID,并搜索第二个文件中是否存在此日志ID。
第一个文件有15000个日志ID,并且手动无法检查每个文件。
这是我的编码尝试:
grep -q "LogID: 1005534" logfile.txt && echo "yes" || echo "no"
但是如何使用我拥有的所有log-id来迭代命令?
这是logID和实际日志文件
答案 0 :(得分:1)
我认为你自己的尝试,使用grep,非常接近
基于本答案末尾引用的两个文件作为演示
(一个MCVE你会很好......),我建议制作三个列表,使用:
grep -of Ids.txt Logfile.txt | sort -u
grep -vf Ids.txt Logfile.txt | grep -o "LogID: .*" | sort -u
grep -o "LogID: .*" Logfile.txt >InIDs.txt && grep -vf InIDs.txt IDs.txt | sort -u
注意:
-u
选项。环境IDs.txt
(注意Logfile.txt中包含的1005539,1005540 不):
LogID: 1005534
LogID: 1005535
LogID: 1005536
LogID: 1005537
LogID: 1005538
LogID: 1005539
LogID: 1005540
环境Logfile.txt
(请注意IDs.txt中包含的1005548 不以及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
输出,否定a
(在Logfile.txt中但不在IDs.txt中的那些):
LogID: 1005548
输出,负b b (那些在IDs.txt但不在Logfile.txt中的那些):
LogID: 1005535
LogID: 1005539
LogID: 1005540
答案 1 :(得分:1)
1:获取唯一ID fr file1。对于每个ID,请在file2中搜索
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