Почему я не могу разбить строку? - PullRequest
0 голосов
/ 15 ноября 2011

Я хочу прочитать файл сценарием оболочки и обработать его построчно. Я хотел бы извлечь 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, и результат тот же. У нас здесь нет удара.

1 Ответ

4 голосов
/ 15 ноября 2011

Это потому, что вы передаете вывод цикла while через 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}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...