/ / Чому я не можу розділити рядок? - оболонка, екс

Чому я не можу розділити рядок? - оболонка, айкс

Я хочу прочитати файл за скриптом оболонки та обробити його рядок за рядком. Я хотів би витягнути 2 поля з кожного рядка. Ось мій код:

#!/bin/bsh
mlist=`ls *.log.2011-11-1* | grep -v error`
for log in $mlist
do
while read line
do
echo ${line} | awk -F"/" "{print $4}"  #This produce nothing
echo ${line}                           #This work and print each line
done < $log | grep "java.lang.Exception"
done

Це зразок рядка з вхідного файлу:

<ERROR> LimitFilter.WebContainer : 4 11-14-2011 21:56:55 - java.lang.Exception: File - /AAA/BBB/CCC/DDDDDDDD.PDF does not exist

Якщо я не використовую bsh, я можу використовувати ksh, і результат такий же. У нас немає башти.

Відповіді:

4 для відповіді № 1

Це тому, що ви передаєте висновок свого циклу grep "java.lang.Exception".

Вихідні дані echo $line | awk -F"/" "{print $4}" є CCC. Коли це проходить через grep, нічого не друкується, бо CCC не відповідає шаблону пошуку.

Спробуйте видалити | grep "java.lang.Exception" і ви побачите, як результат вашого циклу вийшов правильно.

Альтернативним підходом може бути зняття циклу while і замість цього просто використання:

grep "java.lang.Exception" $log | awk -F"/" "{print $4}"