提取路径内容/文件名组件 (BASH)

Extract Path Contents / File Name Components (BASH)

我尝试从中提取 names/words/numbers 文件名供以后使用。

例如

/.../Penguins_45_MIA.txt
/.../Sheep_3.5_KIA.txt
/.../Dolphins_19_AWOL.txt

如您所见,文件名中有下划线分隔的部分,这对我很有用。我将它们放入一个数组 ("currentpath") 中,然后进入一个循环,一次处理一个文件(我认为这是一种非常明智的方法?)。我一直在尝试使用以下命令将路径分解为其组成词和数字:

partialpath=(${currentpath//_/})

然后选择名称的一部分(现在是一个元素),例如动物使用这样的东西:

${partialpath[-3]}

但这不起作用 - 我一直希望上面的回声能给我一个 DolphinsPenguins 等。当我调查时,echo "${partialpath[@]}" 返回:

/.../Dolphins19AWOL.txt

所以我假设数组只有一个元素?也就是说,整个文件路径都粘在一起,没有任何下划线?还是我选错了元素?

此外,我刚刚注意到最后一个元素仍会使 .txt 文件以最后一个元素结尾,这不是最佳选择。

我希望这很清楚,我知道这是一个简单的问题,但我对编写脚本完全陌生,一整天我都在摸不着头脑。

${currentpath//_/} 只是删除了下划线,它不会分解字符串。它可以 用于数组,但只是对每个元素执行相同的字符串操作。试试这个:

$: cat x
/.../Penguins_45_MIA.txt
/.../Sheep_3.5_KIA.txt
/.../Dolphins_19_AWOL.txt

while read line
do tmp="${line##*/}" # remove ALL path stuff from the line 
   tmp="${tmp%.*}"   # remove JUST LAST piece after a dot
   IFS="_" read -a chunk <<< "$tmp"; # split on underscores
   printf "%10s " "${chunk[@]}"; printf "\n"; 
done < x
  Penguins         45        MIA
     Sheep        3.5        KIA
  Dolphins         19       AWOL