我正在尝试处理FE代码中的数据文件,以删除未融合计算生成的答案。我的文件基本上是两列数字。我在stackoverflow(Explain this duplicate line removing, order retaining, one-line awk command)
中找到了另一个提问者的有用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的编辑(对不起,由于格式化,我无法将其置于评论中):
鉴于海报评论“ colum 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
答案 0 :(得分:2)
awk 'NR>1 && $1!=p{print s} {p=$1;s=$0} END{print s}' file
a d
b a
c d
a y
e f
答案 1 :(得分:1)
这是您可以先使用uniq
而不先使用sort
的情况之一。如果第一个字段是固定宽度,您可以简单地执行:
uniq -w1 file
a b
b a
c d
a x
e f
如果它不是固定宽度,请使用旧的rev
技巧:
rev file | uniq -f1 | rev
a b
b a
c d
a x
e f
注意:将 EdMorton 的代表输入用作file
。