这是一个基本的程序,但由于我是一个新手,我无法找到解决方案。
我有一个名为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我需要为所有147个残基提取包含"ASN-2“的所有行在一个文件all_1.dat等。
如果我在终端中运行以下命令,它将为ASN-2提供所需的输出:
awk '{if( NR%147 == 1 ) printf $0 "\n"}' rama.xvg > all_1.dat为了避免对所有残余物重复执行此操作,我编写了以下代码。
#!/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的行。
请告诉我这段代码中的错误是什么。我认为这与筑巢有关。
发布于 2016-06-15 08:48:38
在awk-line中,变量i是awk变量,而不是shell变量!如果要使用shell变量$i,可以这样做:
awk -v i="$i" '{if( NR%147 == i ) printf $0 "\n"}' rama.xvg > all_"$i".dat但我觉得最好把你的while-loop放进awk
awk '{for (i=1; i<=147; i++) { if (NR%147==i) {printf $0 "\n" > ("all_" i ".dat") } } }' rama.xvghttps://stackoverflow.com/questions/37827869
复制相似问题