【问题标题】:How to use awk to print line by line the result for an other program?如何使用 awk 为其他程序逐行打印结果?
【发布时间】:2015-10-24 19:57:28
【问题描述】:

我有一个 file.txt 像:

AAAAAA
AAAAAB
AAAAAC
AAAAAD
...

我想一次将一行用于另一个程序。我的脚本正在使用 awk,它几乎完成了,但仍然无法正常工作。任何人都可以帮忙吗?谢谢!

while read file.txt

line=`awk '{ print $0 ; next}' ../file.txt`

echo 'for aa in "$line": cmd._alt(string.lower(aa)) ; save $line.pdb' > script.pdb

do

pymol script.pdb

done

脚本应该单独读取 file.txt 的每一行以使用 'for aa in "$line" 中的行: cmd._alt(string.lower(aa)) ;为 pymol 保存 $line.pdb' 脚本。

所以预期的输出应该是一个包含所有文件的文件夹:

AAAAAA.pdb AAAAAB.pdb AAAAAC.pdb

【问题讨论】:

  • 你想对显示的输入数据做什么?
  • 这种循环没有多大意义。请提供更多上下文
  • 我想.....这是你想做的吗? sed 's/.*/for aa in "&": cmd._alt(string.lower(aa)) ; save &.pdb/g' file.txt
  • 在没有程序输出的情况下很难发现问题,但请尝试从您的 awk 脚本中删除 next 语句。
  • 每一行都是来自蛋白质的序列,我想用 pymol 的命令通过 pymol 生成:for aa in "&": cmd._alt(string.lower(aa)) ;保存 &.pdb 这将为每个单独生成一个 pdb 文件。

标签: linux bash awk


【解决方案1】:

你可以试试

while read -r line
do
    echo "for aa in \"$line\": cmd._alt(string.lower(aa)) ; save $line.pdb" > script.pdb
    pymol script.pdb
done < file.txt

【讨论】:

  • 谢谢,差不多了!我正在尝试这个:while read -r line do echo "for aa in \"$line\": cmd._alt(string.lower(aa)) ; save $line.pdb" &gt; script.py ; exit pymol script.py done &lt; ../file.txt 但是 Pymol 出错,当我在 pymol 命令中复制粘贴该行时,它可以工作......我不知道为什么
  • 好的,现在脚本可以工作了,这是 .py 到 .pml 的错误,但即使使用 quit pymol 的命令,我也无法在每行之间自动关闭 pymol? while read -r line do echo "for aa in \"$line\": cmd._alt(string.lower(aa)) ; save $line.pdb" &gt; script.pml ; quit pymol script.pml done &lt; ../file.txt
  • 好的,我明白了! while read -r line do echo "for aa in \"$line\": cmd._alt(string.lower(aa)) ; save $line.pdb ; quit" &gt; script.pml pymol script.pml done &lt; ../file.txt谢谢大家!!
  • 我想知道如果我停止进程,是否可以让这个命令保存从哪里开始的行?
  • 脚本现在运行了一段时间,速度变慢了。 file.txt 是 47 000 000 行。有更快的方法吗?
猜你喜欢
  • 2017-06-14
  • 1970-01-01
  • 2016-05-21
  • 1970-01-01
  • 2021-12-02
  • 1970-01-01
  • 1970-01-01
  • 2020-02-29
  • 1970-01-01
相关资源
最近更新 更多