linux - 如何使用 "awk"执行具有相同尾部的多个文件并导出到一些具有新尾部的新文件?

标签 linux bash awk

我有一个包含许多文件的文件夹,每个文件名为xxx.pqr,其中包含蛋白质结构记录。编写一个 bash 脚本,将每个 pqr 文件中的蛋白质移动到原点 (0,0,0) 的中心。将包含重新定位的蛋白质的每个新文件命名为 xxxx.pqr.centered。

我使用“awk”将蛋白质移动到它所在的位置,但是在尝试为每个文件创建 xxx.pqr.centered 时遇到了一些麻烦,这是我的代码,我真的不知道最后几句话:

awk -v n=0 -v sumx=0 -v sumy=0 -v sumz=0 ' { if($1 == "ATOM") sumx=sumx+$6;sumy=sumy+$7;sumz=sumz+$8;n=n+1; if($1 == "ATOM") printf("%s%8.3f%8.3f%8.3f%s\n", substr($0,1,30),$6-(sumx/n),$7-(sumy/n),$8-(sumz/n),substr($0,55,100))}' *.pqr > **????.centered**

最佳答案

这是我的答案,因为我没有您的 .pqr 文件,所以我无法真正测试它,但它应该可以工作(我还通过在需要时合并和使用缩写形式来改进 awk 命令):

对于/path/to/files/*.pqr 中的文件 做 awk -v n=0 -v sumx=0 -v sumy=0 -v sumz=0 '{ if($1 == "ATOM") { sumx+=$6;sumy+=$7;sumz+=$8;n++; printf("%s%8.3f%8.3f%8.3f%s\n", substr($0,1,30),$6-(sumx/n),$7-(sumy/n),$8-(sumz/n),substr($0,55,100)) } } ' $file > ${file}.centered 完毕

关于linux - 如何使用 "awk"执行具有相同尾部的多个文件并导出到一些具有新尾部的新文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33459294/

相关文章:

c++ - 在 Linux 中阻塞 I/O 调用

linux - 每秒对屏幕上的特定区域进行一次屏幕截图

macos - 如何在 Mac OS X 上以编程方式挂起/恢复进程及其子进程?

escaping - 如何在awk打印语句中的参数周围添加单引号?

shell - awk 中的外部变量

c - 在C中实现管道

c - zlib 中解压消息的问题

linux - 使用 bash 删除文件每一行开头的空格

linux - 使用Bash脚本在X时间内创建短和长的sqlplus连接

linux - 意外的 token 错误 :awk when ran with sh var