我正在尝试运行一个针对具有共同ID的目录中所有文件的脚本。
在每种情况下,ID都位于第一个
我尝试了以下方法:
但是我无法弄清楚如何让它工作。在Perl中,我会在循环中将值推入数组的哈希表中:
如何在bash中实现此操作?
ls -1 *.vcf
a1.sourceA.vcf
a1.sourceB.vcf
a1.sourceC.vcf
a2.sourceA.vcf
a2.sourceB.vcf
a2.sourceC.vcf
a3.sourceA.vcf
a3.sourceC.vcf
在每种情况下,ID都位于第一个
.
之前(a1
,a2
或a3
)。对于每个ID,我想要一个关联数组,其中包含该ID的所有来源,由ID作为键,例如:;
a1
=> [a1.sourceA.vcf
, a1.sourceB.vcf
, a1.sourceC.vcf
]我尝试了以下方法:
for file in $(ls *.vcf | sort)
do
id=$(echo $file | cut -d '.' -f 1)
vcfs[$id]+=$file
done
for i in "${!vcfs[@]}"
do
echo "key : $i"
echo "value: ${vcfs[$i]}"
echo " "
done
但是我无法弄清楚如何让它工作。在Perl中,我会在循环中将值推入数组的哈希表中:
push @{$vcfs{$id}}, $file;
以便给我一个如下的数据结构: 'a1' => [
'a1.sourceA.vcf',
'a1.sourceB.vcf',
'a1.sourceC.vcf'
],
'a3' => [
'a3.sourceA.vcf',
'a3.sourceC.vcf'
],
'a2' => [
'a2.sourceA.vcf',
'a2.sourceB.vcf',
'a2.sourceC.vcf'
]
如何在bash中实现此操作?
a3
还是你有a4
之类的? - sjsam