使用shell比较数组中的文件名

时间:2014-11-25 05:07:23

标签: shell

我是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.

请帮忙!

2 个答案:

答案 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