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

add first line to second line but separated with a tab

我正在使用 grep -B2 "average / return" /home/me/Desktop/file , 如何在第一行获得所需的单行输出 添加到第二行但用制表符与第二行分隔?

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
--

您可以尝试将输出通过管道传输到 tr 命令,如下所示:

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

您可以将结果通过管道传输到 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
--

保持简单,去掉 grep 和 pipe 以及其他命令,只在原始文件上使用 awk:

awk '/average \/ return/{print prev "\t" [=10=]} {prev=[=10=]}' file

如果您觉得有用,请随意在输出行之间添加包含 -- 的行:

awk '/average \/ return/{print prev "\t" [=11=] "\n--" } {prev=[=11=]}' file

例如

$ 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" [=12=]} {prev=[=12=]}' 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" [=12=] "\n--" } {prev=[=12=]}' file
some words here average / return 1,2 4 5,6
--
other words here        average / return 4,3 7 9,4
--