我最近在这里问了同样的问题,但我有一些不同的问题。前任:
输入文件
******************
.WER
+ aaa bbb ccc
+ ddd eee
******************
.SDF
+ zzz xxx yyy
+ iii
+ kkk lll
******************
.XCV
+ uuu vvv ggg
+ hhh qqq
******************
期望的输出:
******************
.WER aaa bbb ccc ddd eee
******************
.SDF zzz xxx yyy iii kkk lll
******************
.XCV uuu vvv ggg hhh qqq
******************
因此,如上所述,我有一个文件,其中没有一行是不确定的。可以是 2,3 或 4,每条记录用 ****************** 分隔 是否可以将每条记录的所有行转换为单行?对于我已成功使用的确切行数paste -s -d ' \n'
。
答案1
$ sed -e :a -e '$!N;s/ *\n+ / /;ta' -e 'P;D' testfile
******************
.WER aaa bbb ccc ddd eee
******************
.SDF zzz xxx yyy iii kkk lll
******************
.XCV uuu vvv ggg hhh qqq
******************
http://sed.sourceforge.net/sed1line.txt也有类似的例子。
:a
创建标签“a”$!N
将下一行(和换行符)附加到模式空间,如果它不是最后一行($!)s/ *\n+ / /
将尾随空格、换行符、+ 及其后面的空格替换为单个空格ta
跳回标签 aP
打印模式空间。这将产生双输出,因为我们没有使用-n
sed 的 - 选项,所以现在,我们需要D
删除多余的输出。
答案2
如果你真的想使用 awk,那么至少使用 GNU awk 你可以做类似的事情
$ gawk -vRS='\n[*]+' -F'[ ]*\n[+][ ]*' '{NF+=0; ORS=RT} 1' file
******************
.WER aaa bbb ccc ddd eee
******************
.SDF zzz xxx yyy iii kkk lll
******************
.XCV uuu vvv ggg hhh qqq
******************
它只是设置适当的记录和字段分隔符,并强制使用默认(单个空格)字段分隔符重新组装记录。