在ksh脚本中比较两个数组

时间:2012-12-26 09:04:44

标签: shell ksh

代码段在这里:

  #!/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

2 个答案:

答案 0 :(得分:0)

你提到的sytax错误是因为<之后的空间,你应该使用的进程替换:

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

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

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

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

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

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

答案 1 :(得分:0)

看起来您正在尝试将两个数组进行比较,并找出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

干杯, TK