我正在使用ksh作为shell制作shell脚本,该脚本将日期作为参数,并搜索名为camp_base_prueba_date.txt和rangos.txt的文件,并创建数组idcmps和等级,该shell脚本为:

#!/bin/ksh    
set -A idcmps $(more /home/test/camp_base_prueba_$1.txt | awk '{print $1}')
set -A ranks $(more /home/test/rangos.txt | awk '{print $1}')
rm camp_plani_prueba_$1.txt

for idcmp in ${idcmps[@]}
do
   echo 'the id es: '$idcmp

    for rango in ${ranks[@]}
    do
      echo "the rank: "$rango
      liminf=$(echo $rango|cut -d'-' -f1)
      limsup=$(echo $rango|cut -d'-' -f2)
      echo 'limits: '$liminf'-'$limsup
      echo "****************************"
     done

done

exit

文件camp_base_prueba_ $ 1.txt(其中$ 1是当前日期)包含:

13416
38841
10383
10584
10445
10384

rangos.txt文件包含:

0000-1999
2000-9999
10000-29999

当我运行我的外壳为:

nohup ksh test.sh 14042014 > test.log 2>test.err

我得到了这些东西:

the id es: ::::::::::::::
the rank: ::::::::::::::
limits: ::::::::::::::-::::::::::::::
****************************
the rank: /home/test/rangos.txt
limits: /home/test/rangos.txt-/home/test/rangos.txt
****************************
the rank: ::::::::::::::
limits: ::::::::::::::-::::::::::::::
****************************
the rank: 0000-1999
limits: 0000-1999
****************************
....

预期输出应为:

the id es: 13416
the rank: 0000-1999
limits: 0000-1999
****************************
the rank: 2000-9999
limits: 2000-9999
****************************
the rank: 10000-29999
limits: 10000-29999
****************************
the id es: 38841
the rank: 0000-1999
limits: 0000-1999
****************************
the rank: 2000-9999
limits: 2000-9999
****************************

但是显然是用垃圾创建数组,因为输出错误地显示了变量rank和idcmp的值(显然是垃圾)。 我究竟做错了什么? 还是我想念什么?,我已经用了好几天了。 非常感谢。

===============>>#1 票数:1 已采纳

当我在本地测试时,这可以工作:

#!/bin/ksh
set -A idcmps $(awk '{print $1}' <"camp_base_prueba_$1.txt")
set -A ranks $(awk '{print $1}' <rangos.txt)
rm "camp_plani_prueba_$1.txt"

for idcmp in "${idcmps[@]}"; do
  echo "the id es: $idcmp"
  for rango in "${ranks[@]}"; do
    echo "the rank: "$rango
    liminf=${rango%%-*}
    limsup=${rango#*-}
    echo "limits: $liminf-$limsup"
    echo "****************************"
  done
done

...也就是说,它仍然不是很好的代码-如前两行所述,使用字符串拆分来填充数组充满了错误。

  ask by franvergara66 translate from so

未解决问题?本站智能推荐:

1回复

如何根据ksh中的标志在后台运行进程

在KSH中,我想运行多个命令,这些命令在并行运行或在后台按顺序运行,具体取决于标志。 因此,如果FLAG为true,它将像这样运行: 但是,如果标志为false,则需要依次运行command1,command2和command3。 但这不会影响命令的运行:command4,com
2回复

KornShell(ksh)代码用mailx和uuencode发送附件?

我需要附上一个mailx文件,但目前我没有成功。 这是我的代码: 任何反馈都将受到高度赞赏。 更新我已添加附件var以避免每次都必须使用该路径。
2回复

存储数组值Unix Solaris Korn Shell时出现语法错误问题

这是我在shell脚本中的命令。 第818行的语法错误:`('意外 如果我删除这条线,它的工作 注意:当我在Solaris上尝试运行该脚本时,该脚本将在Linux OS中运行,并引发错误。
8回复

如何在文本文件中扩展shell变量?

考虑一个ASCII文本文件(假设它包含非shell脚本语言的代码): Text_File.msh: 现在,如果这是一个shell脚本,我可以将其作为$ sh Text_File.msh运行,shell将自动扩展变量。 我想要做的是让shell扩展这些变量,然后创建一个新文件Tex
1回复

如何在solaris KSH Shell脚本中仅显示特定扩展名的总文件大小(MB GB或KB)

如何在Sun solaris KSH Shell脚本中仅显示特定扩展名的总文件大小(MB GB或KB)我尝试了AWK命令,以下是命令: 输出:- 回声$ BACKUP_SIZE 所需输出:-
3回复

如何在ksh中反转字符串

请帮助我解决这个问题,我有一个数组女巫,其中包含1000行数字,这些数字被视为字符串,并且我希望所有这些字符串一一反转,我的问题是如何反转它们,因为我必须使用ksh或否则用bash或其他东西就很容易.....我现在所拥有的就是这个,但是rev="$rev${copy:$y:1}"在ksh中不起作
2回复

如何根据在Solaris / Shell中输入的时间选择“等于/晚于”文件

以下是ls -ltrh的基本输出(在Solaris中): 时间的应用程序输出始终采用以下格式(无法更改),根据该格式,我需要选择> = date的文件: 在上述情况下,我需要1月18日以后的所有文件,时间戳为14:41及更高版本。
1回复

跨多个korn(ksh93)shell脚本使用的环境变量(getter-setter)

我有一组脚本共享一些用作状态标志的环境变量。 考虑: ./script1.sh; ./script2.sh; # I execute 2 scripts within the same shell. 现在,每个脚本都会定期执行以下脚本,以设置(刷新)环境变量: . ./se
3回复

Shell脚本在ksh中给出错误

我有一个脚本,该脚本在Bash shell(与Red Hat Linux)中执行时运行良好,但是,该脚本在使用ksh执行该脚本的Solaris 10(DB)服务器上失败。 该脚本基本上从文件中逐行读取并执行存储的proc(在Oracle中)。 下面是我的脚本: 我得到的错误是:
2回复

使用SED从文件中删除一行,然后将输出重定向到同一文件

我使用sed命令从文件中删除前两行和最后一行,我想将输出重定向到SAME文件 范例: 这将从文件中删除前两行和最后一行。但是,当我尝试将输出重定向到同一文件时,出现问题。 当我打开并看到重定向的文件pra ,文件内没有任何内容。 有没有更好的方法做到这一点呢?从文件中删