提取路径内容/文件名组件 (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]}
但这不起作用 - 我一直希望上面的回声能给我一个 Dolphins
或 Penguins
等。当我调查时,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
我尝试从中提取 names/words/numbers 文件名供以后使用。
例如
/.../Penguins_45_MIA.txt
/.../Sheep_3.5_KIA.txt
/.../Dolphins_19_AWOL.txt
如您所见,文件名中有下划线分隔的部分,这对我很有用。我将它们放入一个数组 ("currentpath
") 中,然后进入一个循环,一次处理一个文件(我认为这是一种非常明智的方法?)。我一直在尝试使用以下命令将路径分解为其组成词和数字:
partialpath=(${currentpath//_/})
然后选择名称的一部分(现在是一个元素),例如动物使用这样的东西:
${partialpath[-3]}
但这不起作用 - 我一直希望上面的回声能给我一个 Dolphins
或 Penguins
等。当我调查时,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