ファイルから重複を取り除こうとしています。内容は数字と名前であり、名前は次のようになります(たとえば、重複した名前):ABC ABCxxyy ABC123 ABClmnなど(したがって、ここではファイルにABCのみが必要です)。これを取得するために、次のコードを記述しました。現在、ファイルの読み取り/書き込みを使用しています。配列を使用してこのコードを変更したいのですが、理解できません。
現在のコードは次のとおりです。
for h in `cat name.list`
do
count=`grep -c $h name.list`
if (( $count >= 1 ))
then
echo $h >> name.list.new #building the new list
grep -v $h name.list > name.list.tmpcopy #rebuilding the name.list file...
mv name.list.tmpcopy name.list
fi
done
試しましたが、出力と同じ元のリストが表示されます。
while read line
do
array+=("$line")
done < name.list
#loop thru the array:...
for ((i=0; i < ${#array[*]}; i++))
do
h=${array[i]}
match=$(echo "${array[@]:0}" | tr " " "\n" | grep -c $h)
if (( $match >= 1 ))
then
# remove all matched names from array..... Longest match from front of string(s)
array=${array[@]##$h}
#save the current name to new array
array3[${#array3[*]}]=$h
fi
done
for ELEMENT in "${array3[@]}"
do
echo $ELEMENT
done > name.list.new