如果下一行不是日期,则从当前行删除换行符

时间:2018-03-26 14:46:51

标签: bash awk sed

我有一个看起来会跨越多行的日志文件

 var counter = 1;

 var limit = 1000;

 function addInput(divName) {


if (counter == limit) {

    alert("You have reached the limit of adding " + counter + " inputs");

}

else {

    var table = document.getElementById("tableChecksheet");
    var row = table.insertRow();
    var cell1 = row.insertCell(0);
    cell1.className = "auto-style3"
    var cell2 = row.insertCell(1);
    cell1.innerHTML = "<h2>Dimension Type " + (counter + 1); 
    cell2.innerHTML = "<br><input id='txtdimensiontype " + (counter + 1) + "' type='text' name='myInputs[]' style='width: 500px;'>";

    var row = table.insertRow();
    var cell1 = row.insertCell(0);
    cell1.className = "auto-style3"
    var cell2 = row.insertCell(1);
    cell1.innerHTML = "<h2>Dimension " + (counter + 1);
    cell2.innerHTML = "<br><input id='txtdimension " + (counter + 1) + "' type='text' name='myInputs[]' style='width: 500px;'>";
counter++;
}


 }

我的问题是,如果下一行(即第2行)不以时间戳开头,我如何从第1行删除新行。我一直在关注sed,但大多数解决方案只是提供代码,几乎没有解释。

3 个答案:

答案 0 :(得分:1)

您可以使用此awk

awk '$1 ~ /^([0-9]{2}\/){2}/{if (p) print p; p=$0; next}
     p{p=p FS $0} END{print p}' file

01/02/18 19:01:01 some log some log continuation of line 1 log
01/02/18 19:01:02 some log some log
01/02/18 19:01:03 some log some log

工作原理:

  • $1 ~ /^([0-9]{2}\/){2}确保第一个字段是日期字段
  • 在第一个{...}内,我们打印缓冲区p如果它非空并移动到下一个记录
  • p{...}块内,我们不断向缓冲区p添加行。对于不以日期字段
  • 开头的行执行此块
  • END{...}区块中,我们打印最后一行。

答案 1 :(得分:0)

wold中的另一个问题

awk '/^([0-9]+\/){2}[0-9]+/&&NR>1{printf( "\n")}{printf( "%s ", $0)}' file

答案 2 :(得分:0)

使用gnu sed

sed -E ':A;N;/\n(([0-9 :/]){18})/{P;D;bA};y/\n/ /' infile