如何转换单行记录中不确定的行数

如何转换单行记录中不确定的行数

我最近在这里问了同样的问题,但我有一些不同的问题。前任:

输入文件

******************
.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跳回标签 a

  • P打印模式空间。这将产生双输出,因为我们没有使用-nsed 的 - 选项,所以现在,我们需要

  • 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
******************

它只是设置适当的记录和字段分隔符,并强制使用默认(单个空格)字段分隔符重新组装记录。

相关内容