我有一些文件,它们的命名方式如下:
MG-AB-110_S101_R2_001.fastq.gz, MG-AB-109_S100_R1_001.fastq.gz...
我正在尝试提取第一个下划线之前的所有内容,以便获得:MG-AB-110、MG-AB-109等...
我尝试了以下方法:
name="MG-AB-110_S101_R2_001.fastq.gz"
base_name=${name%%.*}
echo $base_name
MG-AB-110_S101_R2_001
并且还有这个:
base_name=${name%%(.*?)_.* }
echo $base_name
MG-AB-110_S101_R2_001.fastq.gz
我需要这些基础名称与另一个文件夹中的基础名称匹配,所以上面的正则表达式将成为此循环的一部分:
#!/bin/bash
for name in test1/*.gz; do
base_name=${name%%.*}
if [ -f "test2/$base_name" ]; then
cat "$name" "test2/$base_name" >"all_combined/$base_name"
else
printf 'No file in test2 corresponds to "%s"\n' "$name" >&2
fi
done
[[ $name =~ ([^_]*) ]] && echo "${BASH_REMATCH[1]}"
- Cyrus