【问题标题】:Creating one line from two (Bash) [duplicate]从两行创建一行(Bash)[重复]
【发布时间】:2015-02-12 21:52:56
【问题描述】:

我一直在使用 grep、awk 和 sed 有一段时间了,但我有点坚持。

我设法得到了一个格式如下的文件(虚拟数据):

Datacentreone
1.1.1.1.

Datacentretwo
2.2.2.2

Google 
8.8.8.8

但我需要像这样在单行上获取它:

Datacentreone 1.1.1.1
Datacentretwo 2.2.2.2
Google 8.8.8.8

我可以用 Perl 或 PHP 编写一些东西来为我做这件事,但我想了解是否可以仅使用命令行工具轻松地做这样的事情,或者失败了使用 BASH 的样子?

【问题讨论】:

  • 这个 gnu awk 应该做的:awk -v RS= '{$1=$1}1' file

标签: bash awk grep


【解决方案1】:

通过 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,即;一个空行。这将覆盖 RS 变量的默认值 \n。因此 awk 将一两行或多行视为单个记录,直到找到一个空白行。

【讨论】:

  • 完美,谢谢。如果您不介意,您能否简要解释一下它是如何工作的?
  • 您可以将-v RS="\n\n" 替换为任何内容,如下所示:awk -v RS= '{print $1,$2}' 如果有三个空行等,它也可以工作。您还应该提到您的解决方案需要gnu awk,因为记录选择器中有多个字符。
  • {$1=$1} 在这里做什么?
  • 它使用默认的FS作为记录中每个字段之间的分隔符来重构数据。
猜你喜欢
  • 2020-11-10
  • 1970-01-01
  • 2018-11-25
  • 1970-01-01
  • 2021-08-29
  • 2019-01-05
  • 1970-01-01
  • 2014-12-17
  • 1970-01-01
相关资源
最近更新 更多