我有一个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或其他东西。 我非常感谢任何关于此的建议/帮助/指导!
此致
答案 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