2017-02-09 28 views
1

У меня есть следующий контент в файле, и мне нужно извлечь некоторые вещи в другой файл, чтобы облегчить анализ.UNIX: Извлечение только необходимой мне информации


saimptlogi_1~20170208022514~procRTLFHead~~103~RET-0103: generic function processing error~DATAUNEXPECTEDSTOREDAY on FHEAD record at line 0000000001 in /oretail/apprms/mmhome/data/in/RTLOG_4403_20170115010230_1.dat 
saimptlogi_1~20170208022549~procRTLFHead~~103~RET-0103: generic function processing error~DATAUNEXPECTEDSTOREDAY on FHEAD record at line 0000000001 in /oretail/apprms/mmhome/data/in/RTLOG_4189_20170122010240_1.dat 
saimptlogi_1~20170208022555~procRTLFHead~~103~RET-0103: generic function processing error~DATAUNEXPECTEDSTOREDAY on FHEAD record at line 0000000001 in /oretail/apprms/mmhome/data/in/RTLOG_4403_20170116010200_1.dat 
saimptlogi_1~20170208022556~procRTLFHead~~103~RET-0103: generic function processing error~DATAUNEXPECTEDSTOREDAY on FHEAD record at line 0000000001 in /oretail/apprms/mmhome/data/in/RTLOG_4189_20170108010210_1.dat 
saimptlogi_1~20170208022610~procRTLFHead~~103~RET-0103: generic function processing error~DATAUNEXPECTEDSTOREDAY on FHEAD record at line 0000000001 in /oretail/apprms/mmhome/data/in/RTLOG_4147_20170101010223_1.dat 
saimptlogi_1~20170208022643~procRTLFHead~~103~RET-0103: generic function processing error~DATAUNEXPECTEDSTOREDAY on FHEAD record at line 0000000001 in /oretail/apprms/mmhome/data/in/RTLOG_4189_20170107010206_1.dat 
saimptlogi_1~20170208022703~procRTLFHead~~103~RET-0103: generic function processing error~STOREDAYNOTREADYTOBELOAD on FHEAD record at line 0000000001 in /oretail/apprms/mmhome/data/in/RTLOG_4549_20170126010247_7.dat 
saimptlogi_1~20170208022707~procRTLFHead~~103~RET-0103: generic function processing error~DATAUNEXPECTEDSTOREDAY on FHEAD record at line 0000000001 in /oretail/apprms/mmhome/data/in/RTLOG_4189_20170114010259_1.dat 
saimptlogi_1~20170208022736~procRTLFHead~~103~RET-0103: generic function processing error~DATAUNEXPECTEDSTOREDAY on FHEAD record at line 0000000001 in /oretail/apprms/mmhome/data/in/RTLOG_4403_20170108010211_1.dat 

Я хочу, чтобы извлечь ошибку (DATAUNEXPECTEDSTOREDAY или STOREDAYNOTREADYTOBELOAD) Хранилища (RTLOG_ _20170108010211_1) и даты (RTLOG_4403_ 010211_1) в другой файл и мне нужно, чтобы результат был таким:

Пример:

  • DATAUNEXPECTEDSTOREDAY 4403 20170108
  • STOREDAYNOTREADYTOBELOAD 4549 20170126

Я уже разработал команду для извлечения магазина и ДАТУ непосредственно из файлов (RTLOGS), но это было бы лучше извлечь непосредственно из этого файла журнала.

My Command: ls {RTLOG * .failed, RTLOG * .rej} | awk -F '|' '{gsub ("_", ""); print substr ($ 0,7,13), $ 4} '

Заранее спасибо.

+0

Почему это связано с Oracle? – BobC

+0

Потому что saimptlogi - процесс оракула. –

+0

Это не повод пометить Oracle. Тег Oracle предназначен для вопросов, требующих подхода Oracle; ваш вопрос явно является вопросом UNIX.(Если у меня есть слово «французский» в таблице Oracle, это не причина помечать сообщение «французский», не так ли?) – mathguy

ответ

0

@Pedro: Try:

awk '{match($0,/DATAUNEXPECTEDSTOREDAY|STOREDAYNOTREADYTOBELOAD/);if(substr($0,RSTART,RLENGTH)){A=substr($0,RSTART,RLENGTH)};match($0,/RTLOG_.*\.dat/);if(substr($0,RSTART,RLENGTH)){split(substr($0,RSTART,RLENGTH), Q,"_");print A OFS Q[2] OFS substr(Q[3],1,8)}}' OFS="|" Input_file 

Здесь я использую функциональность соответствия awk и первого совпадения. Я ищу строки «DATAUNEXP ECTEDSTOREDAY | STOREDAYNOTREADYTOBELOAD ", а затем проверьте, присутствует ли подстрока RSTART и RLENGTH (RSTART и RLENGTH - это переменные, которые будут SET, когда будет найдено совпадение для регулярного выражения в строке), если да, то значение переменной A в substr ($ 0, RSTART, RLENGTH). Затем в следующем матче проверки RTLOG _. * Dat, чтобы получить часть «RTLOG_4147_20170101010223_1.dat» из строки, если это совпадение найдено, затем с помощью split разделите значение substr ($ 0, RSTART, RLENGTH) на массив с именем Q, разделитель «_». Затем напечатайте значения переменной AQ [2] OFS substr (Q [3], 1,8), где Q [2] - это второй элемент массива Q, который равен 4403,4189 и т. Д., Тогда согласно запросу OP, занимающему всего 8 буквы от RTLOG_4403_ _1 выделенная часть.

Теперь добавьте еще одну форму вкладыша.

awk '{ 
     match($0,/DATAUNEXPECTEDSTOREDAY|STOREDAYNOTREADYTOBELOAD/); 
     if(substr($0,RSTART,RLENGTH)){ 
             A=substr($0,RSTART,RLENGTH) 
            }; 
     match($0,/RTLOG_.*\.dat/); 
     if(substr($0,RSTART,RLENGTH)){ 
             split(substr($0,RSTART,RLENGTH), Q,"_"); 
             print A OFS Q[2] OFS substr(Q[3],1,8) 
            } 
    } 
    ' OFS="|" Input_file 
+0

Он отлично работает! Спасибо! Ouput: DATAUNEXPECTEDSTOREDAY | 4403 | 20170115 DATAUNEXPECTEDSTOREDAY | 4189 | 20170122 DATAUNEXPECTEDSTOREDAY | 4403 | 20170116 DATAUNEXPECTEDSTOREDAY | 4189 | 20170108 DATAUNEXPECTEDSTOREDAY | 4147 | 20170101 DATAUNEXPECTEDSTOREDAY | 4189 | 20170107 STOREDAYNOTREADYTOBELOAD | 4549 | 20170126 DATAUNEXPECTEDSTOREDAY | 4189 | 20170114 DATAUNEXPECTEDSTOREDAY | 4403 | 20170108 –

+0

Рад, что это сработало для вас Педро, продолжайте учиться :) – RavinderSingh13

+0

Спасибо :) Я сделаю это. –

0

Даже я очень люблю AWK, в данном случае я хотел бы использовать команду, чтобы патч в генерации: результат, соответствующий ему

sed -r 's/^.*error.([A-Z]*).*RTLOG_([0-9]*)_([0-9]{8}).*/\1|\2|\3/' 

Это производит что-то вроде этого:

DATAUNEXPECTEDSTOREDAY|4403|20170115 
DATAUNEXPECTEDSTOREDAY|4189|20170122 
DATAUNEXPECTEDSTOREDAY|4403|20170116 
DATAUNEXPECTEDSTOREDAY|4189|20170108 
DATAUNEXPECTEDSTOREDAY|4147|20170101 
DATAUNEXPECTEDSTOREDAY|4189|20170107 
STOREDAYNOTREADYTOBELOAD|4549|20170126 
DATAUNEXPECTEDSTOREDAY|4189|20170114 
DATAUNEXPECTEDSTOREDAY|4403|20170108 
+0

Я пытаюсь запустить следующим образом: sed -r err.saimptlogi * ([AZ] *). * RTLOG _ ([0-9] *) _ ([0-9] {8}). */\ 1 | \ 2 | \ 3/' , но я получаю следующее сообщение об ошибке: СЭД: незаконный вариант - г Использование: SED [-n] сценарий [файл ...] СЭД [-n] [-e сценарий] ... [ -f script_file] ... [файл ...] –

+0

Нет, попробуйте вот так: sed -r 'allTheScript' YourFile.txt – kcoder24

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

  • Нет связанных вопросов^_^