我有一个文件,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)
在这种情况下,这只是中间部分.那,或将所有部分打印到一行.
一个较短的惯用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).