我正在尝试处理来自 FE 代码的数据文件,以删除由未收敛计算生成的答案。我的文件基本上是两列数字。我从 stackoverflow 中的另一个提问者那里找到了一个有用的 AWK 解决方案(解释这个重复行删除、订单保留、单行 awk 命令)
awk '!x[$1]++' file > outFile
这仅打印列 a 的值重复的一组行中的第一行
但是在我的数据文件中,第二列中的正确值将是列 a 重复的最后一行,例如:
对于包含数据的文件:
a b
a c
a d
b a
c d
e f
awk '!x[$1]++' file > outFile
生产
a b
b a
c d
e f
但我需要生成
a d
b a
c d
e f
是否可以通过修改 awk 之类的方法来做到这一点?
由 Ed Morton 编辑(抱歉,由于格式问题,我无法将其放在评论中):
鉴于海报评论“列 a 中的值可能对每个节点重复,但我只希望在它们相邻时删除重复项”,我认为他的真实样本输入和预期输出将是这样的:
输入:
a b
a c
a d
b a
c d
a x
a y
e f
输出:
a d
b a
c d
a y
e f
对于 OP - 如果我错了,请删除上面的内容。
编辑:
抱歉,我试图简化我的问题,但显然未能充分做到这一点。我不想发布一个完整的文件,因为这些是几个 mb 的 txt。每个文件包含按节点结果输出的数据(至少数百个节点)。每个节点数据都以标题部分开头:
S:Min Principal (
Avg: 75p) PI: BLA
DE_MERGE-1 N: 143
X 6
每个标题部分之后是一个两列列表。第一列是时间,第二列是该时间点和节点的计算值。但是,当计算不收敛时,可能会出现给定时间戳的重复条目。每次的最后一个条目将是正确的(收敛的)结果。时间可能(但可能不会)在节点之间重复,并且每次应该在每个节点中保留一行。
下面是文件中一个节点的示例输出。这个文件只有几次重复,可以手动编辑。在其他节点,大多数时间可能出现 10-15 次 - 重复次数各不相同 - 预期的时间点数也是如此。
0. 0.
2.E-03 -4.43054
4.5E-03 -4.43195
10.125E-03 -4.43515
22.7813E-03 -4.44235
51.2578E-03 -4.45856
115.33E-03 -4.49509
259.493E-03 -4.57752
583.859E-03 -4.76425
1.31368 -5.19031
2.95578 -6.24656
6.65051 -8.77117
14.9637 -11.385
32.4455 -11.385
52.4455 -11.385
72.4455 -11.385
92.4455 -11.385
100. -11.385
100. -11.385
102. -11.385
105.75 -11.385
114.188 -11.385
133.172 -11.385
175.887 -11.385
271.995 -11.6325
458.493 -27.0386
600. -32.1938
600. -32.1938
600.2 -32.1939
600.575 -32.1943
601.419 -32.1938
603.317 -32.192
607.589 -32.1879
617.2 -32.1759
638.824 -31.9507
687.479 -31.311
796.952 -29.3312
1.04327E+03 -27.8592
1.59748E+03 -25.3054
2.84445E+03 -21.0816
4.84445E+03 -20.8229
6.84445E+03 -20.8229
8.84445E+03 -20.8229
10.8444E+03 -20.8229
12.6E+03 -20.8229
12.6E+03 -20.8229
12.6002E+03 -20.8229
12.6006E+03 -20.8229
12.6014E+03 -20.8229
12.6033E+03 -20.8229
12.6076E+03 -20.8229
12.6172E+03 -20.8229
12.6388E+03 -20.8229
12.6875E+03 -19.8705
12.797E+03 -19.8283
12.9955E+03 -20.3811
13.1955E+03 -20.6489
13.3955E+03 -23.6448
13.5955E+03 -23.9506
13.7955E+03 -27.1146
13.9955E+03 -28.8359
14.1955E+03 -24.484
14.3955E+03 -11.7371
14.42E+03 -11.4293