我想通过shell脚本读取文件,并逐行处理。我想从每一行中提取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,结果是一样的。我们这里没有bash。
答案 0 :(得分:4)
这是因为您通过grep "java.lang.Exception"
传递了while循环的输出。
echo $line | awk -F"/" '{print $4}'
的输出为CCC
。如果通过grep
传送,则不会打印任何内容,因为CCC
与搜索模式不匹配。
尝试删除| grep "java.lang.Exception"
,您会看到循环输出正确。
另一种方法可能是删除while循环,而只是使用:
grep "java.lang.Exception" $log | awk -F"/" '{print $4}'