我想将一些数据连续地添加到当前列的侧栏中.列的块1和块2由新行分隔.我该怎么做.
Cat filename
aaa
bbb
ccc
ddd
eee
fff
ggg
hhh
cat desiredFile
aaa eee
bbb fff
ccc ggg
ddd hhh
Run Code Online (Sandbox Code Playgroud)
有很多方法.使用bash,paste和GNU sed的简单方法是
paste -d ' ' <(sed '/^$/Q' filename) <(sed '0,/^$/d' filename)
Run Code Online (Sandbox Code Playgroud)
这里
sed '/^$/Q' filename 打印文件中的所有行直到第一个空行sed '0,/^$/d' filename 在第一个空行后打印所有行<() 是一个特定于bash的进程替换,它扩展为可以从中读取命令输出的管道名称(以便它可以用作输入文件名),以及paste -d ' ' file1 file2以您描述的方式将两个文件粘贴在一起(由于空格分隔-d ' ';没有该选项,它将使用选项卡)或者你可以使用awk:
awk -v RS="" -F '\n' 'NF > n { n = NF } { for(i = 1; i <= NF; ++i) a[i] = a[i] OFS $i } END { for(i = 1; i <= n; ++i) print a[i] }' filename
Run Code Online (Sandbox Code Playgroud)
如果为空RS,则awk将文件拆分为空行中的记录,并将-F '\n'这些记录拆分为换行符中的字段,然后代码为
# remember maximum number of fields encountered
NF > n { n = NF }
# wade through the fields, assemble the output lines from them
{ for(i = 1; i <= NF; ++i) a[i] = a[i] OFS $i }
# in the end, print the assembled lines.
END { for(i = 1; i <= n; ++i) print a[i] }
Run Code Online (Sandbox Code Playgroud)
awk方法的优点是它可以使用两个以上的行块.