|
PDB文件Z方向平移#!/bin/bash input_file="em1.pdb" output_file="em1-1.pdb" LENGTH=45 MAX=180 MIN=0 # 检查输入文件是否存在 if [ ! -f "$input_file" ]; then echo "错误:输入文件 $input_file 不存在" >&2 exit 1 fi # 计算文件总行数(处理最后一行无换行符的情况) total_lines=$(wc -l < "$input_file") awk -v total="$total_lines" -v LENGTH="$LENGTH" -v MAX="$MAX" -v MIN="$MIN" ' BEGIN { FIELDWIDTHS = "46 8 1000" # 前46位 + 8位Z坐标 + 剩余内容 } { if (NR >= 5 && NR <= total - 3) { # 提取47-54位(Z坐标) z_str = $2 gsub(/ /, "", z_str) # 移除所有空格
# 验证是否为数字 if (z_str ~ /^-?[0-9]+(\.[0-9]*)?$/) { z = z_str + 0 new_z = z + LENGTH
# 应用边界条件 while (new_z > MAX) { new_z -= MAX } while (new_z < MIN) { new_z += MAX # 应用周期性边界条件 }
# 格式化为标准的8.3f格式 formatted_z = sprintf("%8.3f", new_z) $2 = formatted_z } } print $1 $2 $3 }' "$input_file" > "$output_file" echo "处理完成!结果已保存至 $output_file" |