基于分隔符拆分文件,然后连接到单独的行

snd*_*snd 2 bash awk sed

我有一个文件,example.txt

0
   A
   B
   C, C, C
   D, D
   E
   F
1
   A, A, A
   B
   C
2
   A
   B
   C
   D, D, D
   E
Run Code Online (Sandbox Code Playgroud)

我需要根据任何数字分离文件,然后在这些数字之间取内容并将它们连接成一行,为文件的每个部分重复该过程:

A, B, C, C, C, D, D, E, F
A, A, A, B, C
A, B, C, D, D, D, E
Run Code Online (Sandbox Code Playgroud)

我提出的最好的是:

cat example.txt | sed -e '1,/^[0-9]/d' -e '/^[0-9]/,$d' | paste -sd "," -

A, A, A,   B,   C
Run Code Online (Sandbox Code Playgroud)

在这种情况下,这只是中间部分.那,或将所有部分打印到一行.

Geo*_*iou 5

一个较短的惯用awk替代品:

$ awk '$1=$1{printf "%s%s",$0,(RT==","?OFS:ORS)}' RS="[0-9]|," OFS=", " file1
A, B, C, C, C, D, D, E, F
A, A, A, B, C
A, B, C, D, D, D, E
Run Code Online (Sandbox Code Playgroud)

RS是记录分隔符.默认是新行,这里设置为数字或逗号
OFS是输出字段分隔符=具有单个空格的逗号
RT是使用的记录分隔符值
ORS是输出记录分隔符,默认情况下新行
$1=$1是强制awk重新计算的惯用分配基于OFS,ORS等的值的字段和记录
(RT==","?OFS:ORS)是基于synthax的三元运算
(condition?action for true:action for false).