从文本文件中的两个列表中组合 bash 中的键值对

Combining key value pairs in bash from two lists in text files

我正在 bash 中寻找解决方案,以在 for 循环或类似的东西中重命名生物信息学管道中的多个 fastq 文件。该信息包含在两个列表中。

列表 A

SRR11111111
SRR11111112
SRR11111113
SRR11111114
SRR11111115

列表 B

Sample1
Sample2
Sample3
Sample4
Sample5

我需要将 fastq 文件的名称从列表 A 中的名称更改为列表 B 中的名称。因此名为 SRR11111111(列表 A 中的位置 1)的 fastq 文件变为 sample1(列表 B 中的位置 1)等等。尽管下面的循环是无稽之谈,但它可以让您了解我想要做什么。

for file in listA
do

mv listA[position] listB[position]

done

在 python 等其他包中,我会为此使用字典,使用键值对,或使用配置文件,但不确定在 [=30= 中执行此操作的最有效方法].

这个 question 很相似,但不完全是我要找的。

您可以在进程替换中使用 paste

while read -r old new; do
   echo mv "$old" "$new"
done < <(paste listA listB)

mv SRR11111111 Sample1
mv SRR11111112 Sample2
mv SRR11111113 Sample3
mv SRR11111114 Sample4
mv SRR11111115 Sample5 

如果您对输出感到满意,请删除 mv 之前的 echo

您也可以在此处使用以下 awk

awk 'FNR==NR{a[FNR]=[=10=];next} {system("echo mv " a[FNR] OFS [=10=])}' ListA ListB

如果您对屏幕上打印的命令感到满意,请删除上面代码中的 echo

while IFS= read -r fileA && IFS= read -ru 3 fileB; do
    mv -- "$fileA" "$fileB"
done < listA 3< listB