我想连接两个或多个文件,具体取决于名称是否包含数组中的元素。Bash:基于数组变量的猫
我逐行读取这种文件线(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文件。但是,它实际上是将第一个文件合并两次。我不明白为什么...
你使用'set -vx'来帮助调试变量的值吗?祝你好运。 – shellter