脚本

2015-11-09 29 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