连接与Bash中的字符串匹配的文件

连接与Bash中的字符串匹配的文件,bash,cat,Bash,Cat,我有两个目录(cofactors和set),我需要连接与名称上的字符串匹配的文件。例如,对于包含“aloha”和“boo”的文件名,我希望执行以下操作: cat cofactors/aloha_12345.txt set/aloha_clean.txt >> aloha_12345.txt cat cofactors/boo_5675.txt set/boo_7890.txt >> boo_5675.txt 我一直在使用一些循环进行测试,但无法正确执行: for c i

我有两个目录(cofactors和set),我需要连接与名称上的字符串匹配的文件。例如,对于包含“aloha”和“boo”的文件名,我希望执行以下操作:

cat cofactors/aloha_12345.txt set/aloha_clean.txt >> aloha_12345.txt
cat cofactors/boo_5675.txt set/boo_7890.txt >> boo_5675.txt
我一直在使用一些循环进行测试,但无法正确执行:

for c in set/*.pdb; do echo $c; if awk -F '[/_]' '{print $2}' in cofactors/*.pdb then echo cofactors/*.pdb; done

也许这个算法可以帮助:

  • 对于
    辅因子中的每个
    $file
  • 将文件名的
    前缀置于第一个
    之前
  • 连接文件,并将/${prefix}设置为$file
像这样:

shopt -s nullglob

for f in cofactors/*; do
    basename=${f##*/}
    prefix=${basename%%_*}
    cat "$f" "set/${prefix}_"* > "$basename"
done

(感谢您的改进!)

也许此算法可以帮助:

  • 对于
    辅因子中的每个
    $file
  • 将文件名的
    前缀置于第一个
    之前
  • 连接文件,并将/${prefix}设置为$file
像这样:

shopt -s nullglob

for f in cofactors/*; do
    basename=${f##*/}
    prefix=${basename%%_*}
    cat "$f" "set/${prefix}_"* > "$basename"
done

(感谢您的改进!)

如果有一个文件
cofactors/aloha_12345.txt
和两个文件
set/aloha_clean.txt
set/aloha_other.txt
,就编辑好了。我正在查找文件名上的字符串。在本例中,set/中只有一个文件,cofactors/中只有一个文件。但是如果有更多的文件,如果它们与文件名上的字符串匹配,我希望连接所有这些文件。您的规范的可能副本不是100%完整。1) 如何选择输出文件的名称?2) 您希望以什么顺序连接匹配的文件?3) 当您编写包含“
aloha
”的文件名时,您是指以“
aloha
”开头的文件名,还是可以“
aloha
”在文件名的任何位置匹配的文件名?如果有一个文件
cofactors/aloha_12345.txt
和两个文件
set/aloha_clean.txt
,该怎么办,
set/aloha\u other.txt
?刚刚编辑过。我正在查找文件名上的字符串。在本例中,set/中只有一个文件,cofactors/中只有一个文件。但是如果有更多的文件,如果它们与文件名上的字符串匹配,我希望连接所有这些文件。您的规范的可能副本不是100%完整。1) 如何选择输出文件的名称?2) 您希望以什么顺序连接匹配的文件?3) 当您编写包含“
aloha
”的文件名时,您是指以“
aloha
”开头的文件名还是“
aloha
”可以在文件名的任何位置匹配的文件名?我想您的意思是在
set/
中对文件进行全局搜索,因此不应引用最后一颗星。如果
set/
中没有匹配的文件,则启用
shopt-s nullglob
可能也会有所帮助。我想您是想在
set/
中对文件进行全局处理,因此不应引用最后一个星号。如果
set/
中没有匹配的文件,则启用
shopt-s nullglob
也可能会有所帮助。