Awk 从数据文件中删除所选行
这个问题是我之前的文章“从正则表达式中选择数字”的延续 下面是前一篇文章中发布的示例数据Awk 从数据文件中删除所选行,awk,Awk,这个问题是我之前的文章“从正则表达式中选择数字”的延续 下面是前一篇文章中发布的示例数据 DONOR ACCEPTORH ACCEPTOR atom# res@atom atom# res@atom atom# res@atom %occupied distance angle | 4726 59@O12 | 1487 19@H12 1486 19@O12
DONOR ACCEPTORH ACCEPTOR
atom# res@atom atom# res@atom atom# res@atom %occupied distance angle
| 4726 59@O12 | 1487 19@H12 1486 19@O12 | 85.66 2.819 ( 0.18) 21.85 (12.11)
| 1499 19@O15 | 1730 22@H12 1729 22@O12 | 83.15 3.190 ( 0.31) 22.36 (12.73)
| 1216 16@O22 | 1460 19@H22 1459 19@O22 | 75.74 2.757 ( 0.14) 24.55 (13.66)
| 4232 53@O25 | 4143 52@H24 4142 52@O24 | 74.35 2.916 ( 0.25) 28.27 (13.26)
| 3683 46@O16 | 4163 52@H13 4162 52@O13 | 73.78 2.963 ( 0.29) 23.65 (14.14)
| 4162 52@O13 | 4079 51@H12 4078 51@O12 | 73.68 2.841 ( 0.19) 21.25 (11.87)
| 3764 47@O16 | 3825 48@H26 3824 48@O26 | 70.52 2.973 ( 0.28) 26.88 (13.14)
.
.
The lines goes few thousands.
我厌倦了Fredirk的代码,它可以很好地选择行。好吧,现在我想把这个想法推广到我真正的问题上
我的数据文件中的$3(第3个字段)和$6(第6个字段)表示“数字分子”,其排列如下:
1 2 3 4 5 6 7 8
9 10 11 12 13 14 15 16
17 18 19 20 21 22 23 24
25 26 27 28 29 30 31 32
33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48
49 50 51 52 53 54 55 56
57 58 59 60 61 62 63 64
由上述数字组成的任何对实际上表示数据文件中每行的第3和第6字段中的对
我想要的是选择仅由排列在上述顺序最外层行的数字组成的对
In short, ANY PAIRS made by only the numbers (1 2 3 4 5 6 7 8 57 58 59 60 61 62 63 64 1 9 17 25 33 41 49 57 8 16 24 32 40 48 56 64) are need to be deleted.
我不知道如何在awk代码中编写循环来选择这些对并直接删除这些行
我想提前说声谢谢。使用数组来保存这组数字。在开始块中定义它
BEGIN {
i=0
for (n=1; n<=8; n++) set[i++] = n
for (n=57; n<=64; n++) set[i++] = n
for (n=9; n<=49; n+=8) {set[i++] = n; set[i++] = n+7}
}
我试着在这里按代码运行。但我也没有得到错误的答案。开始{i=0 for(n=1;nwell显然你不想使用$3和$6,你想使用a[1]和b[1]。不要指望我去寻找你的老问题来获得所有细节:你甚至懒得提供链接。很抱歉缺少链接。开始{i=0 for(n=1;n
($3 in set) && ($6 in set) {next}