
私のファイル名は次のとおりです。
A06_S6_L001_R1_001.fastq
A06_S6_L001_R2_001.fastq
B07_S6_L001_R1_001.fastq
B07_S6_L001_R2_001.fastq
C08_S6_L001_R1_001.fastq
C08_S6_L001_R2_001.fastq
そして私はほしい:
1A06.R1.fastq
1A06.R2.fastq
1B07.R1.fastq
1B07.R2.fastq
etc...
つまり、最初の下線の前の部分、最後の下線の前の部分を維持し、それらの.
間に1つを置き、ファイル拡張子を維持し、全体の前に数字を入れたいと思います。 Perl renameがあるので、このコマンドを使用する方が良いと思いますが、正規表現がわかりません...
答え1
prename
方法:
prename -n 's/^([^_]+)_.*_([^_]+)_[0-9]+\./1$1.$2./' *.fastq
( -n
-アクションなし;どのファイルの名前が変わるかを示します)
答え2
bashを使用し、前の接頭辞とdirname
仮定します。1
shopt -s globstar
for file in ./**/*.fastq
do
[[ $file =~ (...)_(..)_(....)_(..)_(...).fastq ]] &&
printf "%s\n" "mv -- "$file" "$(dirname "$file")"/1${BASH_REMATCH[1]}.${BASH_REMATCH[4]}.fastq"
done
この例の「入力」を使用します。
touch A06_S6_L001_R1_001.fastq A06_S6_L001_R2_001.fastq B07_S6_L001_R1_001.fastq B07_S6_L001_R2_001.fastq C08_S6_L001_R1_001.fastq C08_S6_L001_R2_001.fastq
mkdir subdir
cp *.fastq subdir/
結果の出力は次のとおりです。
mv ./A06_S6_L001_R1_001.fastq ./1A06.R1.fastq
mv ./A06_S6_L001_R2_001.fastq ./1A06.R2.fastq
mv ./B07_S6_L001_R1_001.fastq ./1B07.R1.fastq
mv ./B07_S6_L001_R2_001.fastq ./1B07.R2.fastq
mv ./C08_S6_L001_R1_001.fastq ./1C08.R1.fastq
mv ./C08_S6_L001_R2_001.fastq ./1C08.R2.fastq
mv ./subdir/A06_S6_L001_R1_001.fastq ./subdir/1A06.R1.fastq
mv ./subdir/A06_S6_L001_R2_001.fastq ./subdir/1A06.R2.fastq
mv ./subdir/B07_S6_L001_R1_001.fastq ./subdir/1B07.R1.fastq
mv ./subdir/B07_S6_L001_R2_001.fastq ./subdir/1B07.R2.fastq
mv ./subdir/C08_S6_L001_R1_001.fastq ./subdir/1C08.R1.fastq
mv ./subdir/C08_S6_L001_R2_001.fastq ./subdir/1C08.R2.fastq
printf "%s\n"
結果が正確に見える場合は削除してください。