我有一个由程序输出产生的两条目表:
Variable1 : Value1
Variable2 : Value2
Variable3 : Value3
Variable4 : Value4
Variable5 : Value5
Variable6 : Value6
Variable7 : Value7
我需要提取第一对和第五对,这是我用 grep 做的:
$ {program command} | grep -e Variable1 -e Variable5
产生以下输出:
Variable1 : Value1
Variable5 : Value5
这里的问题是我需要两对相同的行,但 grep -e 命令在每个 -e 之后打印 LF/CR;我需要同一行中的四对来根据文件大小进行最终排序。我想我可以从同一个命令行用 awk 或 perl 来做这个,但可惜我对它们还是有点陌生。
有任何想法吗?提前致谢。
答案1
如果您只想加入行,请使用tr
删除换行符:
$ {program command} | grep -e Variable1 -e Variable5 | tr -d '\n'
完成整个事情awk
:
$ {program command} | awk '/Variable[15]/ { printf("%s ", $0) }'
相同于sed
:
$ {program command} | sed -n '/Variable[15]/H; $ { x; s/\n/ /g; p }'
答案2
如果您只想从 grep 连接两行,最简单的方法是通过管道fmt
。
$ {program command} | grep -e Variable1 -e Variable5 | fmt
如果行太长,请使用-w LINELENGTH
fmt 选项。
答案3
您可以通过 Perl 的替换来删除换行符
perl -ne 's/\n/ /; print if /Variable[15]/'
如果最后需要换行,请添加
perl -ne 's/\n/ /; print if /Variable[15]/ }{ print "\n"'