将第一行添加到第二行但用制表符分隔
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
--
我正在使用 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
--