ループを介して一度に複数のファイルを変更して名前を変更できるように、ファイル名の一部である数値を変数として保存しようとしています。ファイル名は Trimmed-barcode*.1.fastq.gz です。ここで * は変数の 2 桁または 3 桁の数字で、これを num として保存しようとします。これにより、$num に先に定義した $number 変数を乗算し、乗算された数字で各ファイルの名前を変更することができます (ただし、今は echo でテストしています)。ファイル名に2桁または3桁の数字を保存する方法は?
for infile in trimmed-barcode*.1.fastq.gz
do num= #how do I get this number
num2=$(($num * $number))
echo "trimmed-barcode${num2}.1.fastq.gz"
done
ベストアンサー1
スクリプトを使用すると、bash
文字列から2つの数字を抽出できます。例えば
var="abcdefg"
echo "${var:3:2}" # Outputs "de"
これにより、スクリプトを次のように調整できます。
#!/bin/bash
for infile in trimmed-barcode??.1.fastq.gz
do
num="${infile:15:2}" # Two characters starting at position 15
result=$(( ${num#0} * number ))
echo "trimmed-barcode$result.1.fastq.gz"
done
$num
を掛けるときは、$number
値から前のゼロを削除してbash
8進数で処理しないようにする必要があります。それだけです${num#0}
。
両方を要求するように質問を修正しました。または3数字。これは実装を大幅に変更します。
ループを繰り返すことはできますが、今回は3つの数字が一致します。
for infile in trimmed-barcode??.1.fastq.gz do # Code as above for two digit extracts done for infile in trimmed-barcode???.1.fastq.gz do # Modify code as above to process three digit values done
残りの部分が興味のある値でなければならないと仮定し、変更されていない部分を削除するようにコードを変更できます。
for infile in trimmed-barcode*.1.fastq.gz do num=${infile#trimmed-barcode} # Strip leading text num=${num%.1.fastq.gz} # Strip trailing text result=$(( ${num#0} * number )) echo "trimmed-barcode$result.1.fastq.gz" done