我有一个包含两种类型图片的目录。以年份(e.q,20131118SPECIFICNUMBER)开头的照片名称以及以swSPECIFICNUMBER开头的草稿名称。
我想首先让ls sw *进入Array:
i=0
while read line
do
array1[ $i ]="$line"
(( i++ ))
done < <(ls sw*)
然后我想在阵列中获得20 * *:
j=0
while read line
do
array2[ $j ]="$line"
(( j++ ))
done < <(ls 20*)
最后一步是比较两个Arrays并将array2中的sw草图添加到array1中,但是已经有一个具有可比较特定数字的图像我不想添加sw草稿。
示例:
Array1 [20131118ABC123,20131118DEF456) Array2 [swABC123,swGHI789]
应该将swGHI789添加到array1但不添加到swABC123,因为已经存在具有可比较特定数字的图像
我有了第一个想法,但这实际上不是我需要的:(请帮忙
for t in "${Array2[@]}"; do
skip=
for q not in "${Array1[@]}"; do
[[ $t == $q ]] && { skip=1; break; }
done
[[ -n $skip ]] || Array1+=("$t")
done
答案 0 :(得分:0)
对于高于4.0的版本,您可以使用bash关联数组(我不确定bash版本是否支持此功能)。
#!/bin/bash
# preparing the two arrays
array1=($(ls -1 20*))
array2=($(ls -1 sw*))
# create a dictionary
# key is specific number
# value is an integer greater than 0
value=1
declare -A dict # declare an associated array
for elem in ${array1[@]}; do
key=${elem:8} # pick the specific number after date
dict[$key]=$value
value=$((value+1))
done
i=${#array1[@]}
for elem in ${array2[@]}; do
key=${elem:2} # pick the specific number after "sw"
if [ -z "${dict[$key]}" ]; then
array1[i]=$elem
i=$((i+1))
fi
done
希望它有所帮助。