【发布时间】:2020-11-04 12:36:28
【问题描述】:
我有数据文件
cell input out type fun level
AI20 A1,A2 Z comb ((A1A2)) 2
IA2 A1,A2,A3 Z comb ((!A1A2)A3) 3
XOR A1,A2,B1 Z comb (((A1A2)B1) 3
IAD A1,A2,A3 Z comb (!((A1A2)A3)) 3
INV I1 ZN comb (!I1) 1
BUF A1,A2,A3,B1 Z comb (!(((A1A2)A3)B1)) 4
根据这些数据,我想打印
level field (6th column)给出sum 7的行。在这里得到
level sum7我们可以选择AI2O,BUF,INV行给水平总和为2+4+1=7并打印它们Or可以选择XOR,IAD,INV给和3+3+1=7并打印出来。任何随机选择的行都有效,但level sum必须是7
输出可以为
cell input out type fun level
AI20 A1,A2 Z comb ((A1A2)) 2
INV I1 ZN comb (!I1) 1
BUF A1,A2,A3,B1 Z comb (!(((A1A2)A3)B1)) 4
或者输出也可以
cell input out type fun level
XOR A1,A2,B1 Z comb (((A1A2)B1) 3
IAD A1,A2,A3 Z comb (!((A1A2)A3)) 3
INV I1 ZN comb (!I1) 1
我用 awk 试过了
awk '{{ sum[i] += $6} for (i=1;i<8;i++) print $0}' file
但这是每行打印 7 次而不是所需的输出。
第 2 部分。请继续第 1 部分。
带有数据的文件2
cell input out type fun level
CLK C Z seq Cq 1
DFk C,Cp Q seq IQ 1
DFR D,C Qn seq IN 1
SKN SE,Q Qp seq Iq 1
第 2 部分的输出
cell input out type fun level
AI20 A1,A2 Z comb ((A1A2)) 2
INV I1 ZN comb (!I1) 1
BUF A1,A2,A3,B1 Z comb (!(((A1A2)A3)B1)) 4
CLK C Z seq Cq 1
XOR A1,A2,B1 Z comb (((A1A2)B1) 3
IAD A1,A2,A3 Z comb (!((A1A2)A3)) 3
INV I1 ZN comb (!I1) 1
DFk C,Cp Q seq IQ 1
IA2 A1,A2,A3 Z comb ((!A1A2)A3) 3
XOR A1,A2,B1 Z comb (((A1A2)B1) 3
INV I1 ZN comb (!I1) 1
part2 的输出是,当我们得到 file1 的 level sum 为 7 时,在其后插入 file2 的第一行。并再次检查级别总和 7 的条件,如果为真,则从 file2 插入第二行。然后再次检查级别总和为 7。如果为真,则从 file2 插入第 3 行。这样做是为了执行 3 次。
【问题讨论】:
-
由于 for 循环,您的 awk 命令每行运行 7 次,导致每行打印 7 次
-
那么如何检查获取总和为 7 的行的条件?
-
你的等级栏有多长?你想要总和为 7 的所有组合吗?并且您想要任何长度的组合(例如,1-1-1-1-1-1-1 也会被选中?)
-
@IoaTzimas .. 级别列非常大,大约 600 行,级别列重复编号为 1、2、3、4、5.. 组合可以是任意长度。你的例如也可以使用。我只想要一个显示总和 7 的组合。但是是的,每次选择应该是随机的当我执行代码时。
-
好的,你想要什么输出?所有可能的行组合?如果有 600 行,您可能会遇到很大的效率问题。例如 200 行产生超过 100 万个 3 项的组合