我有一个文件夹列表,该文件夹基于(a)样本名称命名的文件夹[有时用' _1'或者' _2'对于不同的人]; (b)工作编号[1-12]; (c)染色体编号[chrI-chrXXI]。
例如:
8116_1_chrI.vcf #sample[8116]; jobId[1]; chr[chrI]
8116_1_chrII.vcf #sample[8116]; jobId[1]; chr[chrII]
...
CSC0832_1_7_chrVIII.vcf #sample[CSC0832_1]; jobId[7]; chr[chrVIII]
CSC0832_1_7_chrXIX.vcf #sample[CSC0832_1]; jobId[7]; chr[chrXIX]
...
RNF2887_2_12_chrX.vcf #sample[RNF2887_2]; jobId[2]; chr[chrX]
RNF2887_2_12_chrXI.vcf #sample[RNF2887_2]; jobId[2]; chr[chrXI]
...
每个样本都有相同的作业ID号,每个染色体都有不同的文件。 我正在尝试提交一个作业数组,所以现在我需要每个单个文件的唯一标识符(作业ID),我试图通过(1)重命名那些包括前面的唯一数字; (2)然后添加样本id; (3)然后是染色体编号。
我正在尝试为此循环执行bash,但它无效。以下是我的剧本:
for FILENAME in `ls $SCRATCH/stickleback/sorelData/indSamplesVcf/splitChr/*.vcf`; do
ROOTNAME=`basename ${FILENAME%%_*}`
CHR=`basename ${FILENAME##*_} .vcf`
for LIST in `seq 279`; do
cp "$FILENAME" $SCRATCH/stickleback/sorelData/indSamplesVcf/splitCopy/${LIST}_${ROOTNAME}_${CHR}.vcf
echo "copying $(basename ${FILENAME}) to ${LIST}_${ROOTNAME}_${CHR}.vcf"
done
done
我得到的是一个具有唯一数字的文件,但它们始终是相同的样本ID,并且染色体编号相同:
1_8116_chrIII.vcf
2_8116_chrIII.vcf
...
我注意到的一件事是,当我echo basename ${FILENAME##*_}
时,它按字母顺序列出染色体(因为它们在罗马人中)。这会影响重命名吗?
很抱歉这个冗长而愚蠢的问题,但我是新手。
谢谢!
答案 0 :(得分:1)
如果它有帮助......
directory=$SCRATCH/stickleback/sorelData/indSamplesVcf/splitChr
list=0
for filename in $directory/*.vcf ; do
basename=$( basename ${filename} ) # 8116_1_chrI.vcf
sample=${basename%%_*} # 8116
chr=${basename##*_} # chrI.vcf
list=$(( list+1 ))
cp "$directory/$filename" "$directory/splitCopy/${list}_${sample}_${chr}"
echo "copying $basename to ${list}_${sample}_${chr}"
done
我假设:
我建议:
$( command )
,没有反叛$( ls )