我是shell
脚本的新手
我在数组中放了几个文件名。我想比较它们和它们选择编号最小的文件名。
示例:
file1:ab3_10_10_10.txt
file2:ab3_8_8_8.txt
file3:ab3_7_7_7.txt
在上面的示例中,应选择file3作为所需文件 我只想根据名称进行选择,使用shell。
files=(ab3*) # adding files to array
files=("${files[@]##*/}") # removing the full address from the name
echo "what is in the array:" ${files[@]} # lists what is in the array.
请帮忙!
答案 0 :(得分:0)
你想要做的是循环数组并使用"排序-V":
# set the array
arr=( ab3_10_10_10.txt ab3_8_8_8.txt ab3_7_7_7.txt )
# loop through the array and sort, then pick the first one at the end
count=0
for i in ${arr[@]}; do
echo $i
done | \
sort -V | \
while read i; do
[[ $count = 0 ]] && echo $i
(( count++ ))
done
这给出了:
ab3_7_7_7.txt
" -V"标志为"排序"对于用数字排序更复杂的字符串至关重要。
答案 1 :(得分:0)
在BASH中,您可以使用此脚本:
#!/bin/bash
pos=
min=
i=0
for f in "${files[@]//[^0-9]/}"; do
[[ -z $min || $f -lt $min ]] && min=$f && pos=$i
((i++))
done
echo "min-file: ${files[$pos]}"
min-file: ab3_7_7_7.txt