将第一行添加到第二行但使用制表符分隔

时间:2015-02-13 15:03:12

标签: awk grep

我正在使用grep -B2"平均/返回" / home / me /桌面/文件, 如何在第一行获得所需的单线输出 被添加到第二行但是与第二行分开??

some words here
average / return 1,2 4 5,6 
--
other words here
average / return 4,3 7 9,4
--

期望的输出:

some words here     average / return 1,2 4 5,6
--
other words here    average / return 4,3 7 9,4
--

3 个答案:

答案 0 :(得分:2)

您可以将结果传递给sed

grep ... | sed '/^--$/!{N;s/\n/    /g}'

<强>解释

sed命令适用于那些不包含分隔符的行:/^--$/!。在下面的块中,N用于从输入获取另一行并将其附加到模式缓冲区。最后,substitute命令用于将换行替换为4个空格:s/\n/ /g

只会打印包含分隔符--的行。 (请注意,如果您不希望它们包含在输出中,您可以将--no-group-separator传递给grep命令。谢谢@fedorqui)

<强>输出:

some words here    average / return 1,2 4 5,6 
--
other words here    average / return 4,3 7 9,4
--

答案 1 :(得分:1)

保持简单,丢失grep和pipe等命令,只需在原始文件中使用awk:

awk '/average \/ return/{print prev "\t" $0} {prev=$0}' file

如果您认为有用,可以在输出行之间添加包含--的行:

awk '/average \/ return/{print prev "\t" $0 "\n--" } {prev=$0}' file

e.g。

$ cat file
it was the
some words here
average / return 1,2 4 5,6
best of times
it was the
other words here
average / return 4,3 7 9,4
worst
of times

$ awk '/average \/ return/{print prev "\t" $0} {prev=$0}' file
some words here average / return 1,2 4 5,6
other words here        average / return 4,3 7 9,4

$ awk '/average \/ return/{print prev "\t" $0 "\n--" } {prev=$0}' file
some words here average / return 1,2 4 5,6
--
other words here        average / return 4,3 7 9,4
--

答案 2 :(得分:0)

您可以尝试将输出汇总到tr命令,如下所示:

grep -B2 "average / return" /home/me/Desktop/file | tr '\n' '\t'