我想根据名称是否包含数组中的元素来连接两个或多个文件。
我正在逐行读取这种文件(proteome.pisa):
2PJY_p chain=(B C) hresname=() hresnumber=() hatom=() model=() altconf=()
2Q7N_p chain=(A E F G H I J K L) hresname=(FUC MAN NAG) hresnumber=() hatom=() model=() altconf=()
对于每一行,脚本提取第一列的字符串并将其定义为变量 pdbid。然后它获取第二列并将其定义为一个数组(元素链 $c)。然后它检查是否存在名为 ${pdbid}_${c}_p.pdb 的文件,如果存在,它将其内容合并到文件 ${pdbid}_p_${chains}.pdb
这是脚本:
while read line ; do
echo "$line" > pdb.line
cut -f1 pdb.line > pdb.list
sed -i 's/.*/\"&\"/' pdb.list
sed -i 's/_p//g' pdb.list
awk '{ printf "pdbid="; print }' pdb.list > pdbid.list
cut -f2 pdb.line > chain.list
source pdbid.list
source chain.list
chains=`printf "%s" "${chain[@]}"`
for c in ${chain[@]} ; do
if [ ${#chain[@]} -gt 1 ] && \
[ -f ${pdbid}_${c}_p.pdb ] ; then
cat ${pdbid}_${chain[$c]}_p.pdb >> ${pdbid}_p_${chains}.pdb
fi
done
done < proteome.pisa
例如,预期的行为是将第一行的 2PJY_p_B.pdb 和 2PJY_p_C.pdb 合并到一个名为 2PJY_p_BC.pdb 的文件中。但是,它实际上所做的是将第一个文件合并两次。我无法理解为什么...