用于检索编号最高的文件夹/目录的bash脚本
我目前正在运行一个程序,重新排列基因组,以创建与参考基因组的最佳比对,并在这样做的同时生成许多文件夹,如alignment# 我无法知道这个程序在停止之前会运行多少次迭代,但最终的对齐方式是最好的(可以是从用于检索编号最高的文件夹/目录的bash脚本,bash,Bash,我目前正在运行一个程序,重新排列基因组,以创建与参考基因组的最佳比对,并在这样做的同时生成许多文件夹,如alignment# 我无法知道这个程序在停止之前会运行多少次迭代,但最终的对齐方式是最好的(可以是从alignment5到alignment35),并且在文件夹中会有一个可预测的文件名,尽管文件夹可以更改 我需要一个bash脚本,它将在目录中查找并识别编号最高的目录,并将其存储为变量或类似的内容,理想情况下可以将其传递给其他程序 我只是想补充一点,我的脚本编写非常基本。如果你们能尽可能详细地
alignment5
到alignment35
),并且在文件夹中会有一个可预测的文件名,尽管文件夹可以更改
我需要一个bash脚本,它将在目录中查找并识别编号最高的目录,并将其存储为变量或类似的内容,理想情况下可以将其传递给其他程序
我只是想补充一点,我的脚本编写非常基本。如果你们能尽可能详细地解释你们的答案,或者提供链接到用户友好的资源,我们将不胜感激。这里有一个概念脚本:
#!/bin/bash
shopt -s extglob
DIR="/parent/dir" HIGHEST=''
for A in "$DIR"/alignment+([[:digit:]]); do
B=${A#*/alignment}
[[ -z $HIGHEST || B -gt HIGHEST ]] && HIGHEST=$B
done
[[ -n $HIGHEST ]] && echo "Highest: $DIR/alignment${HIGHEST}"
这假定文件名的前缀一致。
否则,您可以使用“sort-kn--numeric”,有关详细信息,请参阅“man sort”。非常感谢,它的工作方式很有魅力。您能解释一下每一行都在做些什么吗?因为我从来并没有遇到过shopt,而且我还不清楚for循环中的许多语法。
shopt
启用extglob
进行扩展模式匹配'+([[:digit:]])
是一种扩展模式匹配形式,它匹配一个或多个数字。你不能用普通的地球仪B=${A#/alignment}
删除路径名中除数字之外的所有内容。这是关于扩展全局绑定的一个很好的讨论:对于这个条件检查:-z$HIGHEST
测试HIGHEST是否已经设置了值。如果为空,则表示为真实条件,最高值将设置为$B
。否则(使用|
)如果B
大于先前在HIGHEST
(B-gt HIGHEST
)上设置的值,则HIGHEST
也会使用$B
中的新值刷新。非常感谢您的整洁脚本!extglob链接也非常有用,干杯D
ls -1 $directory | sort --numeric