腳本

2015-11-09 34 views
1

從文件Grepping特定字符串我有以下文件:(與文件名的示例文件:2015_09_22_processedPartnumList.txt,位置:/ A/B/C/itemreport)腳本

DataLoader_trace_2015_09_22_02_01_32.0956.log:INFO: 2015-09-22 
Data Processing Starts : 12345678 

我只是想在文件/ a/b/c/d/ids_上獲得上述文件中的所有id,即12345678 ....(每個id在一個單獨的行中,不是逗號分隔).log

我寫了下面的腳本,但我得到的文件是空的。沒有顯示任何異常或任何東西。所以,我很難找出錯誤。請告訴我腳本中出了什麼問題。

LOGDIR=/a/b/logdir 

tr=`date +%p` 
echo $tr 
if [ $tr = "PM" ]; 
then 
    date=`date +%Y-%m-%d` 
    echo "considering today's date for grepping logs" 
else 
    date=`date -d '1 day ago' +%Y-%m-%d` 
    echo "considering yesterday's date for grepping logs as job run is delayed" 
fi 

ITEM_FILE=/a/b/c/d/ids_`date +%d_%m_%Y_%H_%M_%S`.log 

在PCRE中實現grep後,我得到了這個,並沒有將任何id複製到新文件中。

回答

0

如果您grep支持PCRE,你可以這樣做:

grep -Po '.*:\s\K\d+$' /a/b/c/itemreport/2015_09_22_processedPartnumList.txt \ 
     >/apps/feeds/out/catalog/ItemPartnumbers_"$(date '+%d_%m_%Y_%H_%M_%S')".log 
  • .*:\s將匹配高達空間:後,\K將放棄匹配

  • \d+$將符合我們期望的部分即直到行尾的數字

例子:

% grep -Po '.*:\s\K\d+$' 2015_09_22_processedPartnumList.txt \ 
         >ItemPartnumbers_"$(date '+%d_%m_%Y_%H_%M_%S')".log 

% cat ItemPartnumbers_09_11_2015_11_30_49.log 
13982787 
14011550 
13984790 
13984791 
14176509 
14902623 
14924193 
14924194 
13982787 
46795670 
46795671 
+0

對不起,但我不明白'。*:\ s \ K \ d + $',如果可能,請簡單解釋一下。此外,這部分是正確的:'日期「+%Y_%m_%d」'_processedPartnumList.txt,因爲我主要懷疑是在這個日期的事情。 –

+0

@ tanmay2507檢查編輯pelase.also'日期'是好的..檢查我的例子.. – heemayl

+0

請再次看看編輯的問題,我沒有得到partnumbers,因爲你用grep與PCRE做了。 –

0

這不是很好的解決方案,但它的工作。

cat your\ file | cut -d ':' -f2-2 | tr -d INFO 
+0

..... ö 14515220 \ Ó 13982787 \ Ó 46795670 \ O 46795672 \ O 46795675 \ O 46795679 \ O 10001857 \ } 我得到這個作爲我的輸出。所以,爲什麼我在任何地方都得到這個'O',並且有什麼方法可以提取數字部分並在每個部分數字後刪除'/'。 –

+0

沒錯。不幸的是,當複製命令。 – nintyfan