使用文件中的给定前缀过滤特定行

时间:2014-11-04 19:29:18

标签: linux bash sed

我需要在整个文件的最后一个给定前缀之前获取该行,我可以使用哪个命令(sed或任何其他选项)?

例如:(前缀是每行的前两个数字:例如,(16 316)(0 312)等)

file.txt的:

  

16 316 32

     

16 316 0

     

0 312 9997

     

0 312 0

     

0 312 21309

     

0 312 0

     

0 313 10108

     

0 313 0

     

0 313 32732

     

0 313 0

     

0 314 9277

     

0 314 0

     

0 314 19781

     

0 314 0

     

0 315 7

     

0 315 0

     

0 315 9380

     

0 315 0

     

0 315 30388

     

0 315 0

输出应为:

  

16 316 32

     

0 312 21309

     

0 313 32732

     

0 314 19781

     

0 315 30388

由于

2 个答案:

答案 0 :(得分:2)

我假设这些空行实际上不在您的文件中。

tac file.txt | awk '$1 " " $2 != prefix {getline; print; prefix = $1 " " $2}' | tac
16 316 32
0 312 21309
0 313 32732
0 314 19781
0 315 30388

撤消文件。当我看到新的前缀时,打印下一行。然后反转输出。

答案 1 :(得分:1)

awk应该有效:

awk '$3>0{a[$1,$2]=$0} END{for (i in a) print a[i]}' file
16 316 32
0 312 21309
0 313 32732
0 314 19781
0 315 30388