如何在一个连接两条线

我有一个select指定行的问题,并join每一行第二行。

即我有两个文件:

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 

现在我必须join一个第二行。 我的意思是:

 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 

还有一个问题。 如何用date和时间select与grep 2015不同的东西,因为明年的date将从2016年开始,我将不得不改变脚本。

谢谢。

既然你计划使用awkgrep可以被保存, cat无论如何都是无用的。

这awk单线程做你的工作。

 awk '/^2015/{printf "%s%s",(NR>1?"\n":""),$0}/lol1/{printf " %s",$0}' f1 f2 

注意

  1. f1, f2是你的两个文件。 它给出了预期的输出。

  2. 上面的行不遵循every second line规则,而是用timestamp对lol1数据进行分组,这可能是你的真正需求。

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

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

它将整行存储到last变量的last一行,并在last一行加上偶数行last的当前行。

或更短:

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

awk来拯救! 你不需要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 

你可以扩展文件列表。 第一种模式是一个简单的日期内容模式; 根据你的数据应该够了,如果不好转换成更好的一个。

这听起来像这是你在找什么:

 $ 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