如何将两行合并为一行

时间:2015-11-24 21:40:55

标签: linux bash awk grep cat

我在选择指定行时遇到问题,并在一行中每隔一行加入。

即。我有两个文件:

cat lol1.txt
2015-11-15 12:44:34
Name    Value1  Value2
lol1    3   2
lol2    2   5
2015-11-15 12:44:44
Name    Value   Value2
lol1    7   1
lol2    5   1
2015-11-15 12:44:54
Name    Value   Value2
lol1    3   9
lol2    9   2

cat lol2.txt
2015-11-16 10:23:31
Name    Value   Value2
lol1    3   4   
lol2    4   7
2015-11-16 10:23:41
Name    Value   Value2
lol1    7   5
lol2    9   2
2015-11-16 10:23:51
Name    Value   Value2
lol1    2   4   
lol2    2   5

并命令:

cat lol.txt lol2.txt | grep 'lol1\|2015'

返回:

2015-11-15 12:44:34
lol1    3   2
2015-11-15 12:44:44
lol1    7   1
2015-11-15 12:44:54
lol1    3   9
2015-11-16 10:23:31
lol1    3   4   
2015-11-16 10:23:41
lol1    7   5
2015-11-16 10:23:51
lol1    2   4   

现在我必须加入每一行的第二行。我的意思是:

2015-11-15 12:44:34 lol1    3   2
2015-11-15 12:44:44 lol1    7   1
2015-11-15 12:44:54 lol1    3   9
2015-11-16 10:23:31 lol1    3   4
2015-11-16 10:23:41 lol1    7   5
2015-11-16 10:23:51 lol1    2   4   

另一个问题。如何使用除grep 2015之外的其他东西选择具有日期和时间的行,因为明年将从2016年开始,我将不得不更改脚本。

感谢。

4 个答案:

答案 0 :(得分:2)

您可以将其传递给以下awk命令:

... | awk 'NR%2{last=$0;next}{print last, $0}'

它将整行存储在奇数行的变量last中,并在偶数行上打印last加上当前行。

或更短:

... | awk '!(NR%2){print l, $0}{l=$0}'

答案 1 :(得分:1)

要求救援!你不需要cat / grep。

 $ awk '/^[0-9-]{10}/{printf $0 FS} /lol1/' lol1.txt
2015-11-15 12:44:34 lol1    3   2
2015-11-15 12:44:44 lol1    7   1
2015-11-15 12:44:54 lol1    3   9

您可以扩展文件列表。第一种模式是简单的日期内容模式;基于你的数据应该足够,如果不容易转换为更好的数据。

答案 2 :(得分:1)

听起来这就是你要找的东西:

$ awk '/-/{t=$0} /lol1/{print t, $0}' lol1.txt lol2.txt
2015-11-15 12:44:34 lol1    3   2
2015-11-15 12:44:44 lol1    7   1
2015-11-15 12:44:54 lol1    3   9
2015-11-16 10:23:31 lol1    3   4
2015-11-16 10:23:41 lol1    7   5
2015-11-16 10:23:51 lol1    2   4

答案 3 :(得分:0)

由于您计划使用RemoveEmptyEntriesawk可以保存,grep无论如何都无用。

这个awk单行做你的工作。

cat

注意

  1. awk '/^2015/{printf "%s%s",(NR>1?"\n":""),$0}/lol1/{printf " %s",$0}' f1 f2 是您的两个文件。它给出了预期的输出。

  2. 上述行不遵循f1, f2规则,而是按时间戳对every second line数据进行分组,这可能是您的真正要求。