" ././tst.ksh:16行:ONL P BL9_RATED_EVENT_D 1,295 780 4,063,232 60 LOCA SYST AUTO:无法打开[没有这样的文件或目录]"
我试图在-vx模式下执行以下脚本 我不知道为什么在输出中我得到这个
#for i in `cat /tefnfs/tef/tools/tooladm/Users/Jithesh/prd3cust.log | grep ONL | column -t`
while i= read -r line
do
echo $i
stat=`echo $i | cut -d" " -f1`
typ=`echo $i | cut -d" " -f2`
tbs=`echo $i | cut -d" " -f3`
tot=`echo $i | cut -d" " -f4`
free=`echo $i | cut -d" " -f5`
lrg=`echo $i | cut -d" " -f6`
fr=`echo $i | cut -d" " -f7`
Ext=`echo $i | cut -d" " -f8`
All=`echo $i | cut -d" " -f9`
spc=`echo $i | cut -d" " -f10`
done < `cat /tefnfs/tef/tools/tooladm/Users/Jithesh/prd3cust.log | grep ONL | column -t`
+ cat /tefnfs/tef/tools/tooladm/Users/Jithesh/prd3cust.log | grep ONL | column -t+ cat /tefnfs/tef/tools/tooladm/Users/Jithesh/prd3cust.log
+ column -t
+ grep ONL
././tst.ksh: line 16: ONL P BL9_RATED_EVENT_D 1,295 780 4,063,232 60 LOCA SYST AUTO: cannot open [No such file or directory]
答案 0 :(得分:0)
我将在这里解释一些问题
read命令提供命令后给出的变量。在您的代码中,line
是已填充变量的名称,i =
不属于此处。第一个改进是:
while read -r i
do
echo $i
stat=`echo $i | cut -d" " -f1`
typ=`echo $i | cut -d" " -f2`
tbs=`echo $i | cut -d" " -f3`
tot=`echo $i | cut -d" " -f4`
free=`echo $i | cut -d" " -f5`
lrg=`echo $i | cut -d" " -f6`
fr=`echo $i | cut -d" " -f7`
Ext=`echo $i | cut -d" " -f8`
All=`echo $i | cut -d" " -f9`
spc=`echo $i | cut -d" " -f10`
done < /tefnfs/tef/tools/tooladm/Users/Jithesh/prd3cust.log
我也改变了最后一行。 while循环想要从文件中读取,而不是从命令的输出中读取 注意:您将从Bash示例中感到困惑。如果要将命令的输出重定向到while循环,可以在Bash中使用一些特殊语法。 在Bash中,您将需要它,以便在完成while循环后,在while循环中设置的变量是已知的 在您的情况下,ksh,您可以通过从您的命令开始并将其重定向到while循环来解决它 修复代码而不修复逻辑
cat /tefnfs/tef/tools/tooladm/Users/Jithesh/prd3cust.log | grep ONL | column -t | while read -r i
do
echo $i
stat=`echo $i | cut -d" " -f1`
typ=`echo $i | cut -d" " -f2`
tbs=`echo $i | cut -d" " -f3`
tot=`echo $i | cut -d" " -f4`
free=`echo $i | cut -d" " -f5`
lrg=`echo $i | cut -d" " -f6`
fr=`echo $i | cut -d" " -f7`
Ext=`echo $i | cut -d" " -f8`
All=`echo $i | cut -d" " -f9`
spc=`echo $i | cut -d" " -f10`
done
使用column -t
没有帮助。在尝试将它们拆分为空格之前,您需要将字段与一个空格隔开。您需要用空格替换制表符,并将多个空格压缩到一个空格。
您可以使用expand -1 | tr -s " "
。
我想建议用符号$(subcommand)
替换backtics,但是您可以使用read命令分配变量。
我的建议是
grep ONL /tefnfs/tef/tools/tooladm/Users/Jithesh/prd3cust.log | expand -1 | tr -s " " |
while read -r stat typ tbs tot free lrg fr Ext All spc; do
echo "Processed line starting with ${stat}"
done
现在你应该在while循环中做一些事情。每次while循环处理下一行时,变量都会更改。在while循环之后,变量将使用最后一行处理的值填充。