从两行创建一行(Bash)

从两行创建一行(Bash),bash,awk,grep,Bash,Awk,Grep,我已经和grep、awk和sed一起玩了一段时间了,但我有点被这件事困住了 我已成功获取以下格式的文件(虚拟数据): 但我需要在这样的单行线上得到它: Datacentreone 1.1.1.1 Datacentretwo 2.2.2.2 Google 8.8.8.8 我可以用Perl或PHP编写一些东西来为我做这件事,但我想了解一下,仅仅使用命令行工具是否可以轻松地完成类似的事情,或者使用BASH做不到这一点?通过GNU awk $ awk -v RS="\n\n" '{print $1,$

我已经和grep、awk和sed一起玩了一段时间了,但我有点被这件事困住了

我已成功获取以下格式的文件(虚拟数据):

但我需要在这样的单行线上得到它:

Datacentreone 1.1.1.1
Datacentretwo 2.2.2.2
Google 8.8.8.8
我可以用Perl或PHP编写一些东西来为我做这件事,但我想了解一下,仅仅使用命令行工具是否可以轻松地完成类似的事情,或者使用BASH做不到这一点?

通过GNU awk

$ awk -v RS="\n\n" '{print $1,$2}' file
Datacentreone 1.1.1.1.
Datacentretwo 2.2.2.2
Google 8.8.8.8

此处记录分隔符设置为
\n\n
ie;空行。这将覆盖
RS
变量的默认值
\n
。因此,awk将一行、两行或多行视为单个记录,直到找到空行为止

太好了,谢谢。如果您不介意的话,可以简单地解释一下它是如何工作的吗?您可以将
-vrs=“\n\n”
替换为空,例如:
awk-vrs='{print$1,$2}“
如果有三个空行等,它也可以工作。您还应该提到,由于记录选择器中有多个字符,您的解决方案需要
gnu awk
。什么是
{$1=$1}”
do here?它使用默认的
FS
作为记录中每个字段之间的分隔符来重建数据。这个gnu awk应该做:
awk-v RS='{$1=$1}1'文件
$ awk -v RS="\n\n" '{print $1,$2}' file
Datacentreone 1.1.1.1.
Datacentretwo 2.2.2.2
Google 8.8.8.8