我在Ubuntu上有一个地址txt文件。像下面的东西 -
Name
Address1
Address2
Address3
Name2
Address12
Address22
Address32
如何将内容合并为 -
Name Address1 Address2 Address3
Name2 Address12 Address22 Address32
实际上地址是一个接一个地写入文件 - 如上所述。新地址由新行或空行分隔。现在我想将每个地址行合并为一行 - 所以重复所有地址
答案 0 :(得分:5)
这是awk
awk -v RS= '{$1=$1}1' file
Name Address1 Address2 Address3
Name2 Address12 Address22 Address32
Name3 Address13 Address23 Address33
设置RS
使awk
使用数据块作为记录
{$1=$1}1
重建了这条线。
如果字段以0
开头(不那么健壮),则会失败:
awk -v RS= '$1=$1' file
答案 1 :(得分:4)
将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用户指南:
RS ==“”
记录由空白行分隔。当FS是单身时 字符,然后换行符始终作为字段 除了FS可能具有的任何值之外,还有分隔符。领导和 将忽略文件中的尾随换行符。
答案 2 :(得分:1)
awk -v ORS=" " '{print}/^$/{printf("\n")}END{printf("\n")}' File
将输出记录分隔符(ORS
)设置为space
,打印每一行。每当遇到空行时,请打印newline ("\n")
。在"\n"
块中打印END
以获得所需的输出。希望这是你想要的。
<强>示例:强>
sdlcb@Goofy-Gen:~/AMD$ cat File
Name
Address1
Address2
Address3
Name2
Address12
Address22
Address32
Name2
Address12
Address22
Address32
sdlcb@Goofy-Gen:~/AMD$ awk -v ORS=" " '{print}/^$/{printf("\n")}END{printf("\n")}' File
Name Address1 Address2 Address3
Name2 Address12 Address22 Address32
Name2 Address12 Address22 Address32