tcsh error: while loop
tcsh error: while loop
这是一个基本程序,但由于我是新手,所以我无法找出解决方案。
我有一个名为 rama.xvg 的文件,格式如下:
-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
我需要在一个文件 all_1.dat 中提取所有包含 "ASN-2" 的行,依此类推所有 147 个残基。
如果我 运行 在终端中执行以下命令,它会为 ASN-2 提供所需的输出:
awk '{if( NR%147 == 1 ) printf [=11=] "\n"}' rama.xvg > all_1.dat
为了避免对所有的残基重复做,我写了下面的代码。
#!/bin/tcsh
set i = 1
while ( $i < 148)
echo $i
awk '{if( NR%147 == i ) printf [=12=] "\n"}' rama.xvg > all_"$i".dat
@ i++
end
但是此代码在所有输出文件中打印包含 GLY-148 的行。
请告诉我这段代码中的错误是什么。我觉得跟嵌套有关
在您的 awk
行中,变量 i
是 awk 变量而不是 shell 变量!如果你想使用 shell-变量 $i
你可以这样做:
awk -v i="$i" '{if( NR%147 == i ) printf [=10=] "\n"}' rama.xvg > all_"$i".dat
但我认为最好将您的 while
-loop 放入 awk
:
awk '{for (i=1; i<=147; i++) { if (NR%147==i) {printf [=11=] "\n" > ("all_" i ".dat") } } }' rama.xvg
这是一个基本程序,但由于我是新手,所以我无法找出解决方案。
我有一个名为 rama.xvg 的文件,格式如下:
-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
我需要在一个文件 all_1.dat 中提取所有包含 "ASN-2" 的行,依此类推所有 147 个残基。
如果我 运行 在终端中执行以下命令,它会为 ASN-2 提供所需的输出:
awk '{if( NR%147 == 1 ) printf [=11=] "\n"}' rama.xvg > all_1.dat
为了避免对所有的残基重复做,我写了下面的代码。
#!/bin/tcsh
set i = 1
while ( $i < 148)
echo $i
awk '{if( NR%147 == i ) printf [=12=] "\n"}' rama.xvg > all_"$i".dat
@ i++
end
但是此代码在所有输出文件中打印包含 GLY-148 的行。
请告诉我这段代码中的错误是什么。我觉得跟嵌套有关
在您的 awk
行中,变量 i
是 awk 变量而不是 shell 变量!如果你想使用 shell-变量 $i
你可以这样做:
awk -v i="$i" '{if( NR%147 == i ) printf [=10=] "\n"}' rama.xvg > all_"$i".dat
但我认为最好将您的 while
-loop 放入 awk
:
awk '{for (i=1; i<=147; i++) { if (NR%147==i) {printf [=11=] "\n" > ("all_" i ".dat") } } }' rama.xvg