Я хочу прочитати файл за скриптом оболонки та обробити його рядок за рядком. Я хотів би витягнути 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}"