从文本文件中的两个列表中组合 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
我正在 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