Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何合并包含某些内容的文本并保留空行_Bash_Awk - Fatal编程技术网

Bash 如何合并包含某些内容的文本并保留空行

Bash 如何合并包含某些内容的文本并保留空行,bash,awk,Bash,Awk,我在Ubuntu上有一个地址txt文件。像下面这样- Name Address1 Address2 Address3 Name2 Address12 Address22 Address32 我如何像这样合并内容- Name Address1 Address2 Address3 Name2 Address12 Address22 Address32 实际上,地址是一个接一个地写入文件的,就像上面提到的那样。新地址由新行或空行分隔。现在,我想将每个地址行合并为一行,并对所有地址重复合并 awk

我在Ubuntu上有一个地址txt文件。像下面这样-

Name
Address1
Address2
Address3

Name2
Address12
Address22
Address32
我如何像这样合并内容-

Name Address1 Address2 Address3
Name2 Address12 Address22 Address32
实际上,地址是一个接一个地写入文件的,就像上面提到的那样。新地址由新行或空行分隔。现在,我想将每个地址行合并为一行,并对所有地址重复合并

awk -v ORS=" " '{print}/^$/{printf("\n")}END{printf("\n")}' File
将输出记录分隔符设置为空格,打印每行。每当遇到空行时,打印换行符\n。在结束块中打印\n以获得所需的输出。希望这是你想要的

样本:

将输出记录分隔符设置为空格,打印每行。每当遇到空行时,打印换行符\n。在结束块中打印\n以获得所需的输出。希望这是你想要的

样本:

将RS设置为空字符串将使用一个或多个空行作为记录分隔符

$ cat addr.txt
Name
Address1
Address2
Address3

Name2
Address12
Address22
Address32




Name3
Address13
Address23
Address33

$ awk 'BEGIN { RS="" } { gsub("\n"," ") }1' addr.txt
Name Address1 Address2 Address3
Name2 Address12 Address22 Address32
Name3 Address13 Address23 Address33
从awk用户指南:

卢比=

记录由一行行的空行分隔。当FS是单个 字符,则换行符始终用作字段 分隔符,以及FS可能具有的任何值。领导和 忽略文件中的尾随换行符

将RS设置为空字符串将使用一个或多个空行作为记录分隔符

$ cat addr.txt
Name
Address1
Address2
Address3

Name2
Address12
Address22
Address32




Name3
Address13
Address23
Address33

$ awk 'BEGIN { RS="" } { gsub("\n"," ") }1' addr.txt
Name Address1 Address2 Address3
Name2 Address12 Address22 Address32
Name3 Address13 Address23 Address33
从awk用户指南:

卢比=

记录由一行行的空行分隔。当FS是单个 字符,则换行符始终用作字段 分隔符,以及FS可能具有的任何值。领导和 忽略文件中的尾随换行符

这是一个awk

通过设置RS,awk可以使用数据块作为记录。 {$1=$1}1重建该行

如果字段以0开头,则此操作失败,因此鲁棒性较低:

awk -v RS= '$1=$1' file
这是一个awk

通过设置RS,awk可以使用数据块作为记录。 {$1=$1}1重建该行

如果字段以0开头,则此操作失败,因此鲁棒性较低:

awk -v RS= '$1=$1' file


你能提供一个更广泛的例子和相应的期望输出吗?你能提供一个更广泛的例子和相应的期望输出吗?谢谢你提供的细节。但有时也会有多个空行重复处理-我如何删除多个空行在awk中这不是解决此问题的方法,请参阅@Jotne的答案以了解正确的方法。感谢提供详细信息。但有时地址之间也会有多个空行重复-我如何删除多个空行这不是awk解决此问题的方法,请参阅@Jotne的答案以了解正确的方法。或者仅是awk-vRS='gsub\n,FS'文件非常好,@Jotne,虽然在病态情况下,一个地址只有一行,但它不会被打印出来。问:有没有办法完全避免gsub,并对OFS做些什么?请参阅我的帖子。不使用gsub。或者只使用awk-vRS='gsub\n,FS'文件非常好,@Jotne,尽管在一个地址只有一行的情况下,它不会被打印出来。问:有没有办法完全避免gsub,并对OFS做些什么?请参阅我的帖子。没有使用gsub。这很好,正是我希望得到的,但我试图用$0=$0重新构建这一行,我现在知道,并认为可能还有其他人愿意注意到这一点。@jas这与我学习linux的方式相同,看看其他人都做了些什么,并使用谷歌:+1,因为这正是正确的答案,尽管没有在-v和RS=之间留一个空格,这会使它不必要地呆呆地特定于@埃德蒙顿:谢谢,我不知道。今天也学习一些新知识,谢谢谢谢这个脚本真的是一个很棒的脚本,这正是我希望得到的,但我试图用$0=$0重新构建这一行,我现在知道了,并且认为可能还有其他人想要注意到这一点。@jas这与我学习linux的方式相同,看看其他人都做了些什么,并使用谷歌:+1,因为这正是正确的答案,尽管没有在-v和RS=之间留一个空格,这会使它不必要地呆呆地特定于@埃德蒙顿:谢谢,我不知道。今天也学习一些新知识,谢谢谢谢这个剧本真的很棒