我试图在-vx模式下运行脚本,但收到错误

时间:2016-01-12 16:54:32

标签: unix ksh

" ././tst.ksh:16行:ONL P BL9_RATED_EVENT_D 1,295 780 4,063,232 60 LOCA SYST AUTO:无法打开[没有这样的文件或目录]"

我试图在-vx模式下执行以下脚本 我不知道为什么在输出中我得到这个

!/ bin / ksh -xv

    #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]

1 个答案:

答案 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循环之后,变量将使用最后一行处理的值填充。