이름에 배열 요소가 포함되어 있는지 여부에 따라 두 개 이상의 파일을 연결하고 싶습니다.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_BC.pdb라는 파일의 첫 번째 행, 2PJY_p_B.pdb 및 2PJY_p_C.pdb을 위해, 예를 들어 병합하는 것이 었습니다. 그러나 실제로는 첫 번째 파일을 두 번 병합합니다. 나는 이유를 이해할 수 없다 ...
변수의 값을 디버깅하는 데'set -vx'를 사용하고 있습니까? 행운을 빕니다. – shellter