我在目录中有很多fq.gz
个文件,我想遍历每个文件名,删除最后8个字符并将其打印到示例名称文本文件
例如
984674-TAATGAGC-GCTGTAGA--R1.fq.gz
984674-TAATGAGC-GCTGTAGA--R2.fq.gz
将成为:
984674-TAATGAGC-GCTGTAGA--
984674-TAATGAGC-GCTGTAGA--
目前我有一个bash
脚本将每个文件名放入一个数组中,然后将该数组打印到sample.txt
文件中。然后,我尝试将mv
文件名设置为新的所需文件名:
#!/bin/bash
declare -a FILELIST
for f in *.gz; do
#FILELIST[length_of_FILELIST + 1]=filename
FILELIST[${#FILELIST[@]}+1]=$(echo "$f");
done
printf '%s\n' "${FILELIST[@]:1:10}" > sample.txt
sample_info=sample.txt
sample_files=($(cut -f 1 "$sample_info"))
for file in "${sample_files[@]}"
do
mv "$file" "${file::(-8)}"
echo $file
done
但脚本并没有删除任何字符。你能帮我吗?
答案 0 :(得分:2)
循环遍历每个文件名,删除最后8个字符并将其打印到示例名称,这对您有用:
for i in *fq.gz
do
echo ${i:0:-8}
done
答案 1 :(得分:1)
使用子字符串删除here。假设你想从最后输出完全8
个字符:
for n in *.fq.gz
do
echo "${n%%??.fq.gz}"
done
进行测试,
$ n="984674-TAATGAGC-GCTGTAGA--R1.fq.gz"
$ echo "${n%%??.fq.gz}"
984674-TAATGAGC-GCTGTAGA--
OR
$ echo "${n%%????????}"
984674-TAATGAGC-GCTGTAGA--