2015-11-09 2 views
1

У меня есть следующий файл: (A образец файл с именем файла: 2015_09_22_processedPartnumList.txt, Местонахождение:/а/б/с/itemreport)оглавлению определенной строки из файла в сценарии

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

Я просто хочу получить все идентификаторы из вышеуказанного файла, т.е. 12345678 .... (каждый идентификатор в отдельной строке, а не запятой) в файле/a/b/c/d/ids_ date +%d_%m_%Y_%H_%M_%S .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 

После реализации Grep в PCRE, я получаю это, и нет никаких идентификаторов копируются в новый файл.

ответ

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 + $ ', пожалуйста, объясните это кратко, если это возможно. Кроме того, эта часть правильная: «date» +% Y_% m_% d »' _processedPartnumList.txt, потому что мое основное сомнение в этой дате. –

+0

@ tanmay2507 проверить правки pelase..также 'date' - это Ok..check мой пример .. – heemayl

+0

Еще раз посмотрите на отредактированный вопрос, я не получаю парни, как вы это делали с grep с PCRE. –

0

Это не очень хорошее решение, но это работает.

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

..... O 14515220 \ O 13982787 \ O 46795670 \ O 46795672 \ O 46795675 \ O 46795679 \ O 10001857 \ } Я получаю это как свой вывод. Итак, почему я получаю это «O» повсюду и есть какой-либо способ просто извлечь цифровую часть и удалить «/» после каждого партитуры. –

+0

Правильно. К сожалению, команда копирования. – nintyfan

Смежные вопросы