bash:为同一目录中的文件创建一个数组

发布于 2025-01-11 14:53:40 字数 936 浏览 0 评论 0原文

我正在使用位于同一目录中的 mol2 filles 合奏。

structure36S.mol2   structure30S.mol2   structure21.mol2
structure36R.mol2   structure30R.mol2   Structure20R.mol2
structure35S.mol2   structure29R.mol2   Structure19R.mol2
structure35R.mol2   structure28R.mol2   Structure13R.mol2
structure34S.mol2   structure27R.mol2
structure34R.mol2   structure26.mol2    jacks18.mol2
structure33S.mol2   structure25.mol2    5p9.mol2
structure33R.mol2   structure24.mol2    Y6J.mol2
structure32R.mol2   structure23.mol2    06I.mol2
structure31R.mol2   structure22.mol2

根据这些数据,我需要创建一个关联数组,其中包含填充名称(不带扩展名(mol2))以及所有元素之间共享的一些值(7LMF):

dataset=( [structure36S]=7LMF [structure36R]=7LMF [structure35S]=7LMF ...[06I]=7LMF [Y6J]=7LMF )

我们可以从以下脚本开始:

for file in ./*.mol2; do
file_name=$(basename "$file" .mol2)
#some command to add the file into the array
done

如何完成此脚本用于创建数组?

I am working with the ensemble of the mol2 filles located in the same directory.

structure36S.mol2   structure30S.mol2   structure21.mol2
structure36R.mol2   structure30R.mol2   Structure20R.mol2
structure35S.mol2   structure29R.mol2   Structure19R.mol2
structure35R.mol2   structure28R.mol2   Structure13R.mol2
structure34S.mol2   structure27R.mol2
structure34R.mol2   structure26.mol2    jacks18.mol2
structure33S.mol2   structure25.mol2    5p9.mol2
structure33R.mol2   structure24.mol2    Y6J.mol2
structure32R.mol2   structure23.mol2    06I.mol2
structure31R.mol2   structure22.mol2

From this data I need to make an associative array with the names of the filles (without extension (mol2)) as well as some value (7LMF) shared between all elements:

dataset=( [structure36S]=7LMF [structure36R]=7LMF [structure35S]=7LMF ...[06I]=7LMF [Y6J]=7LMF )

We may start from the following script:

for file in ./*.mol2; do
file_name=$(basename "$file" .mol2)
#some command to add the file into the array
done

How this script could be completed for the creating of the array?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

披肩女神 2025-01-18 14:53:40

我建议打开 nullglob 否则,当没有匹配项时,模式将计算为字符串。
使用参数扩展来删除文件扩展名。
如果包含前导“./”,则需要使用另一个扩展将其删除。

#!/usr/bin/env bash

shopt -s nullglob
declare -A dataset

for file in *.mol2; do
    dataset+=([${file%.*}]=7LMF)
done

for key in "${!dataset[@]}"; do echo "dataset[$key]: ${dataset[$key]}"; done

I would recommend turning on nullglob otherwise the pattern will evaluate as a string when there is no match.
Use parameter expansion to remove the file extension.
If the leading './' is included, it will need to be stripped with another expansion.

#!/usr/bin/env bash

shopt -s nullglob
declare -A dataset

for file in *.mol2; do
    dataset+=([${file%.*}]=7LMF)
done

for key in "${!dataset[@]}"; do echo "dataset[$key]: ${dataset[$key]}"; done
梦醒灬来后我 2025-01-18 14:53:40

试试这个 Shellcheck - 干净的代码:

#! /bin/bash -p

shopt -s nullglob

declare -A dataset

for file in *.mol2; do
    file_name=${file%.mol2}
    dataset[$file_name]=7LMF
done

# Show the contents of 'dataset'
declare -p dataset

Try this Shellcheck-clean code:

#! /bin/bash -p

shopt -s nullglob

declare -A dataset

for file in *.mol2; do
    file_name=${file%.mol2}
    dataset[$file_name]=7LMF
done

# Show the contents of 'dataset'
declare -p dataset
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文