【发布时间】:2012-07-27 03:18:42
【问题描述】:
我有一个如下所示的输入文件(第一列是位置编号,第二列是应随时间增加的计数):
1 0
1 2
1 6
1 7
1 7
1 8
1 7
1 7
1 9
1 9
1 10
1 10
1 9
1 10
1 10
1 10
1 10
1 10
1 10
1 9
1 10
1 10
1 10
1 10
1 10
1 10
我想修复它,看起来像这样(替换计数随着之前的计数而减少):
1 0
1 2
1 6
1 7
1 7
1 8
1 8
1 8
1 9
1 9
1 10
1 10
1 10
1 10
1 10
1 10
1 10
1 10
1 10
1 10
1 10
1 10
1 10
1 10
1 10
1 10
我一直在尝试为此使用 awk,但由于我似乎无法弄清楚如何重置行号(NR?)所以它会读取每一行并且它是下一行,因此我绊倒了 getline,一次不是两条线。这是我到目前为止的代码,有什么想法吗?
awk '{a=$1; b=$2; getline; c=$1; d=$2; if (a==c && b<=d) print a"\t"b; else print c"\t"d}' original.txt > fixed.txt
另外,这是我目前得到的输出:
1 0
1 6
1 7
1 7
1 9
1 10
1 9
1 10
1 10
1 9
1 10
1 10
1 10
【问题讨论】:
-
好的,澄清一下,您是否要跳过计数减少的行?这么多行,不知道你能否举一个同样清楚的更简短的例子?
-
对不起,如果我的解释不清楚,我想在计数减少时打印前一行,所以最终得到相同的行数,但文件的计数保持不变或增加,但绝不会减少。
-
我明白了..看看下面提供的答案,我想你会找到你想要的。