比较数组

时间:2015-10-25 12:38:36

标签: arrays linux bash shell unix

a=0
b=1
for a in ${my_array[@]} 
   do
for b in ${my_array[@]}
   do
 if [ "  ${my_array[a]} " = "  ${my_array[b]} " ]
then 
 continue 
 ((a++)) 
fi

   done
  ((b++)) 
done

您好。我想比较2个字符串。它们在同一个数组中。如果它们是相同的,我只打印其中一个。我怎样才能做到这一点 ?我写了一些代码。有2个(a和b)a的第一个值是0,它存储数组的第一个元素。 b的第一个值是1,它存储1.element数组。我想比较它们,如果它们是相同的字符串,我只打印其中一个。所以我使用“继续”。认为我的代码是真的,但它不起作用。这是一个我无法看到的错误。你能救我吗?

例如它就像那样运行。

 Enter words :
 erica 17
 sally 16
 john  18
 henry 17
 john 18
 jessica 19

如你所见,有2个约翰18,我不想要他们两个。我的程序将检查有2个字符串是否相同。如果它们是相同的,我将只使用其中一个。

3 个答案:

答案 0 :(得分:0)

if ifment" =" - 分配," ==" - 比较。

答案 1 :(得分:0)

如果我理解正确,你想要统一数组的元素。如果这是正确的,那么下面的stackoverflow问题(How can I get unique values from an array in Bash?)似乎在以下单行中回答:

echo "${my_array[@]}" | tr ' ' '\n' | sort | uniq

不幸的是,由于您的输入词(或数组元素)包含空格,因此上述操作无法正常工作。问题是因为第一个回波会将数组展平为空格分隔的元素。解决方法是使用printf并删除'tr'。这是......

printf '%s\n' "${my_array[@]}" | sort | uniq -c

但这改变了原始数组中元素的位置。希望没事?

答案 2 :(得分:0)

您可以使用sortuniq来获得所需的输出:

echo "${my_array[@]}" | tr ' ' '\n' | sort | uniq -c | tr '\n' ' '

如果你的输入中有空格,你可以使用它:

printf '%s\n' "${my_array[@]}" | sort | uniq -c

通过这种方式,您将获得字符串发生的次数,但它只打印一次。