如何合并在Linux类似的路线 [英] how to merge similar lines in linux

查看:96
本文介绍了如何合并在Linux类似的路线的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有我的Linux系统上的文件test.txt这在下面的格式有数据:

I have a file test.txt on my linux system which has data in following format :

first second third fourth 10  
first second third fourth 20  
fifth sixth seventh eighth 10  
mmm nnn ooo ppp 10  
mmm nnn ooo ppp 20   

我需要修改如下格式 -

I need to modify the format as below -

first second third fourth 10 20  
fifth sixth seventh eighth 10 0  
mmm nnn ooo ppp 10 20  

我曾尝试以下code

I have tried following code

cat test.txt | sed 'N;s/\n/ /' | awk -F" " '{if ($1~$5){print $1" "$2" "$3" "$4" "$8} else { print $0 }}'

但是,这是不是给所需的输出。当存在不具有它下面的类似线一条线,此命令失败。 ü可以建议我为这个任何解决方案?

But this is not giving required output. When there is a line which doesn't have a similar line below it,this command fails. Can u suggest me any solution for this??

推荐答案

下面是做到这一点的一种方法:

Here is one way to do it:

awk ' {
  last=$NF; $NF=""
  if($0==previous) {
    tail=tail " " last
  }
  else {
    if(previous!="") {
      if(split(tail,foo)==1) tail=tail " 0"
      print previous tail
    }
    previous=$0
    tail=last
  }
}
END {
    if(previous!="") print previous tail
}
'

这篇关于如何合并在Linux类似的路线的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆