【问题标题】:comparing two array in ksh script比较 ksh 脚本中的两个数组
【发布时间】:2012-12-26 09:04:43
【问题描述】:

代码 sn-p 在这里:

  #!/usr/bin/ksh

   diff(){
     awk 'BEGIN {RS=ORS= }
            {NR==FNR?a[$0]++:a[$0]--}
                   END{for(k in a)if(a[k])print k}' < (echo -n "${!1}") < (echo -n "${!2}")
   }

                   Array1=( key1 key2 key3 key4 key5 key6 key7 key8 key9 key10 )
                  Array2=( key1 key2 key3 key4 key5 key6 )
                  Array3=($(diff Array1[@] Array2[@]))
                  echo ${Array3[@]}

我遇到了错误

syntax error at line 6 : `(' unexpected

【问题讨论】:

  • 请添加标签以表明您使用的操作系统,即 AIX/Solaris/HP 或其他 Unixen。如果您使用的是 Linux,请将其编辑为 echo ${.sh.version} 返回的值。如果您使用的是此处列出的旧版 Unix(和其他),那么您几乎可以肯定使用的是 ksh88,它不支持您在上面使用的所有语法。祝你好运。

标签: shell ksh


【解决方案1】:

你提到的语法错误是因为&lt;后面的空格,你应该使用进程替换:

<(echo -n "${1}") <(echo -n "${2}")

! 非常可疑(我收到一个语法错误),我不确定您要在这里实现什么。

此外,您没有将数组传递给函数,而只是传递它们的名称。你的意思是:

Array3=($(diff "${Array1[@]}" "${Array2[@]}"))

当然,您不能将数组传递给函数,只能传递列表。

调用自己的函数diff 是个坏主意,因为有一个同名的标准实用程序可能会引起混淆。

【讨论】:

    【解决方案2】:

    看起来您正在尝试比较两个数组并找出可以通过associative arrays in AWK or KSH 完成的差异。但是,如果您正在查看更大的集合,我不能 100% 确定您是否不会遇到一些 KSH 数组大小限制。 (或者我错了。)

    KSH:
    typeset -A aArray;                                      # Declare
    aArray=([this]=1 [that]=2 [who]=3 [what]=4 [where]=5);  # Assign
    print ${aArray[@]}                                      # Print out the elements.
    print ${aArray[one]}                                    # Index
    
    AWK:
    aArray["this"]=1;aArray["that"]=2;aArray["who"]=3;aArray["what"]=4;aArray["where"]=5;  # Declare
    for ( KEY in aArray ) print KEY" Value at KEY: "aArray[KEY];                                                       # Print
    

    干杯, 传统知识

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-16
      • 2022-10-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多