首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tcsh错误: while循环

tcsh错误: while循环
EN

Stack Overflow用户
提问于 2016-06-15 06:43:15
回答 1查看 330关注 0票数 1

这是一个基本的程序,但由于我是一个新手,我无法找到解决方案。

我有一个名为rama.xvg的文件,格式如下:

代码语言:javascript
复制
-75.635  105.879  ASN-2
-153.704  64.7089  ARG-3
-148.238  -47.6076  GLN-4
-63.2568  -8.05441  LEU-5
-97.8149  -7.34302  GLU-6
-119.276  8.99017  ARG-7
-144.198  -103.917  SER-8
-65.4354  -10.3962  GLY-9
-60.6926  12.424  ARG-10
-159.797  -0.551989  PHE-11
 65.9924  -48.8993  GLY-12
 179.677  -7.93138  GLY-13
..........
...........
-70.5046  38.0408  GLY-146
-155.876  153.746  TRP-147
-132.355  151.023  GLY-148
-66.2679  167.798  ASN-2
-151.342  -33.0647  ARG-3
-146.483  41.3483  GLN-4
..........
..........
-108.566  0.0212432  SER-139
 47.6854  33.6991  MET-140
 47.9466  40.1073  ASP-141
 46.4783  48.5301  SER-142
-139.17  172.486  LYS-143
  58.9514  32.0602  SER-144
  60.744  18.3059  SER-145
-94.0533  165.745  GLY-146
-161.809  177.435  TRP-147
 129.172  -101.736  GLY-148

我需要为所有147个残基提取包含"ASN-2“的所有行在一个文件all_1.dat等。

如果我在终端中运行以下命令,它将为ASN-2提供所需的输出:

代码语言:javascript
复制
awk '{if( NR%147 == 1 ) printf $0 "\n"}' rama.xvg > all_1.dat

为了避免对所有残余物重复执行此操作,我编写了以下代码。

代码语言:javascript
复制
 #!/bin/tcsh
set i = 1
    while ( $i < 148)
    echo $i
    awk '{if( NR%147 == i ) printf $0 "\n"}' rama.xvg > all_"$i".dat
    @ i++

end

但这段代码会在所有输出文件中打印包含GLY-148的行。

请告诉我这段代码中的错误是什么。我认为这与筑巢有关。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-15 08:48:38

awk-line中,变量i是awk变量,而不是shell变量!如果要使用shell变量$i,可以这样做:

代码语言:javascript
复制
awk -v i="$i" '{if( NR%147 == i ) printf $0 "\n"}' rama.xvg > all_"$i".dat

但我觉得最好把你的while-loop放进awk

代码语言:javascript
复制
awk '{for (i=1; i<=147; i++) { if (NR%147==i) {printf $0 "\n" > ("all_" i ".dat") } } }' rama.xvg
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37827869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档