2017-08-14 57 views
-2

我有一个大的输出文件(~25000行)的字母数字文本,每个步骤至少有4个实例,但可能是第5个,后面跟着我的所有数据。我只想输出每个步骤的最后一个迭代到一个文本文件,并删除所有其他人如何做到这一点?删除模式中的Previouse实例

实施例:每次迭代应为在自己的行

输入文件:data.dat文件

1 step1.1 
1 step1.2 
1 step1.3 
1 step1.4 
2 step2.1 
2 step2.2 
2 step2.3 
2 step2.4 
2 step2.5 

希望的输出:

1 step1.4 
2 step2.5 

回答

0
  1. 这可能破坏的顺序:只记得每个键的最近行:

    awk '{line[$1] = $0} END {for (key in line) print line[key]}' data.dat 
    
  2. 扭转文件和打印第一一次看到一个键,然后再反向输出(这是一个“著名的” AWK成语)

    tac data.dat | awk '!seen[$1]++' | tac 
    
+0

第二个选项工作完美,谢谢你的帮助! – John