2017-06-09 68 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

相關問題