删除txt文件中“MSG”行之前的每一行数据?

时间:2016-01-13 22:20:25

标签: python csv awk

我有一个txt文件,其中包含大约70行左右的数据,其中包含8个左右的列。第二列定义数据类型(SMP或MSG)。在该数据文件中,总共有62行数据被识别为“MSG”。我正在尝试创建一个简单的awk命令,甚至是一个简短的python脚本,它将删除文件中每个“MSG”行之前的1行数据。实际数据文件中的示例部分:

976810  SMP  2  144.79  108.25  
993461  SMP  2  144.68  108.15
945277  SMP  2  144.90  108.10
945828  SMP  3  144.83  108.31      
945237  MSG  3  # Message: 5
943544  SMP  3  144.87  108.58      
945209  SMP  3  144.93  108.68
976916  SMP  3  145.17  108.72
997481  SMP  3  140.90  109.33  
914197  SMP  4  140.79  109.15  
945300  MSG  4  # Message: 0
940848  SMP  4  140.84  109.11
945568  SMP  4  140.91  109.03  
945200  SMP  4  141.08  109.01

所以在上面的例子中,我需要在每个MSG行之前删除SMP行。 我想也许我会用awk命令来搜索$ 2 =='MSG',然后删除行MSG-1或其他东西。 我非常感谢任何关于此的建议/帮助/指导!

此致

1 个答案:

答案 0 :(得分:2)

$ awk 'NR>1 && $2!="MSG"{print prev} {prev=$0} END{print prev}' file
976810  SMP  2  144.79  108.25
993461  SMP  2  144.68  108.15
945277  SMP  2  144.90  108.10
945237  MSG  3  # Message: 5
943544  SMP  3  144.87  108.58
945209  SMP  3  144.93  108.68
976916  SMP  3  145.17  108.72
997481  SMP  3  140.90  109.33
945300  MSG  4  # Message: 0
940848  SMP  4  140.84  109.11
945568  SMP  4  140.91  109.03
945200  SMP  4  141.08  109.01