我有一个文件,它的名字如下:
12U12345._L001_R1_001.fastq.gz
Run Code Online (Sandbox Code Playgroud)
我想将变量分配给12U12345零件.
到目前为止,我有:
variable=`basename $fastq | sed {s'/_S[0-9]*_L001_R1_001.fastq.gz//'}`
Run Code Online (Sandbox Code Playgroud)
注意:$fastq是一个变量,其中包含文件的完整路径.
这个解决方案目前返回完整的文件名,任何想法如何做到这一点?
只需使用shell提供的内置参数扩展,而不是生成一个单独的进程
fastq="12U12345._L001_R1_001.fastq.gz"
printf '%s\n' "${fastq%%.*}"
12U12345
Run Code Online (Sandbox Code Playgroud)
或者用printf()它来一次性存储到一个新的变量
printf -v numericPart '%s' "${fastq%%.*}"
printf '%s\n' "${numericPart}"
Run Code Online (Sandbox Code Playgroud)
还有bash一个内置的正则表达式比较运算符,=~用你可以做的表示
fastq="12U12345._L001_R1_001.fastq.gz"
regex='^([[:alnum:]]+)\.(.*)'
if [[ $fastq =~ $regex ]]; then
numericPart="${BASH_REMATCH[1]}"
printf '%s\n' "${numericPart}"
fi
Run Code Online (Sandbox Code Playgroud)