bash中文件行中的值序列

时间:2015-08-26 07:51:38

标签: bash line sequence

我的文件包含以下内容:

id=123
time=1440367263
from=user1
version=none
final=none
id=124
time=1440367264
from=user2
version=none
final=none
etc...

然而,某些时候排在"来自"或者" final"缺少,这打破了序列。 例如:

id=123
time=1440367263
from=user1
version=none
final=none
id=124
time=1440367264
version=none
final=none
etc...

问题是,我试图从它生成单行,从示例1开始,我生成的输出如下:

id=123 time=1440367263 from=user1 version=none final=none
id=124 time=1440367264 from=user2 version=none final=none

如果缺少某些值,则会中断每行的顺序。 id,time,from,version,final

我如何维护这些顺序,如果有缺失值,请添加= 0值以保持序列?

任何帮助将不胜感激,

谢谢, AL

2 个答案:

答案 0 :(得分:0)

这样的事情:

awk -F= '
    function report() {
        printf("id=%s time=%s from=%s version=%s final=%s\n",
               a["id"], a["time"], a["from"], a["final"])
    }
    function reset() {
        # Make sure the array a is empty
        delete a
        # Defining the fields in which we are interested
        a["id"]=a["time"]=a["from"]=a["version"]=a["final"]=0
    }
    $1=="id" {
         if ("id" in a) report()
         reset()
    }
    $1 in a {a[$1]=$2} # Storing key + value 
                       # if we are interested in a field
' file

编辑:重做,因为我现在了解要求:)

答案 1 :(得分:0)

我认为View itineraryYour Guest\s*<[^>]*>\s*([^\s<>]+(?:\s*[^\s<>])*) 始终存在,我在它之前注入换行符

id

输出

cat r |tr '\n' ' '|sed -r 's/(id=[^ ]+)/\n\1/g';echo