我有一个包含31个不同文件的目录,每个文件代表一个CELL_TYPE(这些文件的示例如下所示)。
public void sales() {
int sales = 0;
sales = sales + totalSold;
}
我有一个脚本,为每个CELL_TYPE文件生成22个新文件(所以31 * 22 = 682个文件)。
topControlGenes.GeneSet
topProjection_Cluster5Genes.GeneSet
topAstrocytesGenes.GeneSet
topProjection_Cluster6Genes.GeneSet
topNeuronsInhCGE1Genes.GeneSet
topNeuronsInhCGE2Genes.GeneSet
这适用于每个文件,但我不想在每次脚本完成时更改命令中的名称。相反,我想为我的目录中的每个文件运行此命令。
有办法做到这一点吗?
答案 0 :(得分:2)
以下是使用嵌套for循环的一种可能解决方案:
# Iterate over all GeneSet files
for f in *.GeneSet; do
# Figure out the cell type by removing "Genes.GeneSet" from the end of the filename
cell_type=${f%Genes.GeneSet}
# Process the file
echo "Processing file: $f with cell type $cell_type"
for i in {1..22}; do
python make_annot.py --gene-set-file "$f" --bimfile ../../1000G_EUR_Phase3_plink/1000G.EUR.QC.${i}.bim --annot-file ${cell_type}.${i}.annot.gz
done
done
答案 1 :(得分:2)
您可以使用以下嵌套的for
循环:
for f in *Genes.GeneSet
do
for i in `seq 1 22`
do
python make_annot.py --gene-set-file "${f}" --bimfile ../../1000G_EUR_Phase3_plink/1000G.EUR.QC.${i}.bim --annot-file `echo "${f}" | grep -oP '^.*(?=Genes.Geneset$)'`.${i}.annot.gz;
done
done
这会循环播放所有CELL_TYPEGenes.GeneSet
和CELL_TYPE.${i}.annot.gz
以生成31 * 22 = 682 files
组合
其中echo "${f}" | grep -oP '^.*(?=Genes.Geneset$)'
用于获取文件名的CELL_TYPE部分