在下面,我尝试data
根据子目录中IonCode_0000_
每个文件对data
与$1
in的部分匹配,在特定运行中重命名每个子文件夹中的内容f1
。将有多个运行,f1
但每个运行$uniq
都是唯一的,并且可以在f1
和 中找到重命名值$2
。下面的代码对我认为发生的事情进行了评论。谢谢 :)。
set -x
到目前为止都很好,Rename from:IonCode_0404 to:00-0000-xxx-xxx-xxx IonCode_0402 11-1111-yy-yy-yyy
但我不确定为什么会这样或如何解决它。我对这篇长篇文章表示歉意,我只是想包含所有细节,因为我无法解决这个问题。谢谢 :)。
数据内容 --- 这些是要重命名的文件对 ----
IonCode_0402_xxx_xxx_xxx.bam
IonCode_0402_xxx_xxx_xxx.bam.bai
IonCode_0404_xxx_xxx_xxx.bam
IonCode_0404_xxx_xxx_xxx.bam.bai
f1 --- 这是重命名部分匹配的文件来自 ---
IonCode_0404 00-0000-xxx-xxx-xxx
IonCode_0402 11-1111-yy-yy-yyy
R_2019_00_00_00_00_00_xxxx_xx1-127-xxx_xxx_xxx_xxx_xx_xx_xx
IonCode_0402 22-2222-zz-zzzz-zzz
R_2019_00_00_00_00_00_xxxx_xx1-126-xxx_xxx_xxx_xxx_xx_xx_xx
重命名后的当前 dara --- 只有一对用来自的两个值重命名f1
IonCode_0402_xxx.xxx_xxx.bam
IonCode_0402_xxx.xxx_xxx.bam.bai
00-0000-xxx-xxx-xxx IonCode_0402 11-1111-yy-yy-yyy_test.bam.bam
00-0000-xxx-xxx-xxx IonCode_0402 11-1111-yy-yy-yyy_test.bam.bam.bai
重命名后所需的数据
11-1111-yy-yy-yyy_test.bam
11-1111-yy-yy-yyy_test.bam.bai
00-0000-xxx-xxx-xxx_test.bam
00-0000-xxx-xxx-xxx_test.bam.bai
巴什
set -x
dir=$1
for f in "$dir" ; do ## operate on desired directory
uniq=${dir##*/} ## store run with no path as uniq
while read from to ## start loop using from to
do
(
cd "$dir"/data ## change directory to subfolder $from
echo "Rename from:$from to:$to" ## echo files
for file in *.bam*
do
newname=${file/$from*.bam/${to}_test.bam} ## rename adding text
[ -f "$file" ] && [ "$newname" != "$file" ] && mv "$file" "$newname" ## if names in uniq change file name
done
)
done <<<$(
awk -F '\n' -v RS="" -v ref="$uniq" ' ## filter to this run in uniq
$0 ~ ref {
d=split($0, val); ## split on newline and space
for(i=1;i<d;i++) print val[i];
}' "$dir"/f1
) ## loop through f1 for unique run and populate from and to
done