问题:sh中的迭代

时间:2014-08-01 08:13:06

标签: bash sh

我是sh的新人,我想在数组上进行迭代。

declare -a NumPack
NumPack=(88 88 454 454 65 874 874 21 21)
for carton in $NumPack
do
echo "carton: $NumPack"
done

我想搜索与第一个相同的数字。 我的程序将为第一个数字(88)返回2,为下一个数字(454)返回3,为下一个数字(65)返回1.

我还有第二个数组,其中包含上面包含的文章数。

declare -a NumArt
NumArt= (ZZZZ CCDE AZDSDS SDSEE AAAZE TTGYH DFDF ARFFF TRUCC TOUCKC)

文章

(ZZZZ,CCDE) belong to the pack 88 
the articles (AZDSDS,SDSE,AAAZE) belong to the pack 454, 
the article TTGYH belong to the pack 65, 
the articles (DFDF,ARFFF) belong to 874, and the rest to 21.

我必须通过一对4将这些行推入文件中。我必须避免拆分包。属于包的每篇文章都必须在一个文件中。

所以

88 => file1
  454,65 => file2
  (874,21) =>file3.

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

我假设你想学习而不是解决问题(在这种情况下我主张使用uniq -c命令)

请参阅以下脚本:

declare -a NumPack
NumPack=(88 88 454 454 65 874 874 21 21)
declare -A res
for carton in "${NumPack[@]}"
do
echo "carton: $carton"
res[$carton]=$((${res[$carton]}+1))
done
echo ${res[@]}

我创建了一个名为res的关联数组来保存结果。请注意迭代的正确方法:for carton in ${NumPack[@]}以及$(( ))用于代数表达式。