我在选择指定行时遇到问题,并在一行中每隔一行加入。
即。我有两个文件:
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年开始,我将不得不更改脚本。
感谢。
答案 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)
由于您计划使用RemoveEmptyEntries
,awk
可以保存,grep
无论如何都无用。
这个awk单行做你的工作。
cat
awk '/^2015/{printf "%s%s",(NR>1?"\n":""),$0}/lol1/{printf " %s",$0}' f1 f2
是您的两个文件。它给出了预期的输出。
上述行不遵循f1, f2
规则,而是按时间戳对every second line
数据进行分组,这可能是您的真正要求。