我有一个文件,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
我需要根据任意数字分隔文件,然后获取这些数字之间的内容并将它们连接成一行,对文件的每个部分重复该过程:
A, B, C, C, C, D, D, E, F
A, A, A, B, C
A, B, C, D, D, D, E
我想到的最好的是:
cat example.txt | sed -e '1,/^[0-9]/d' -e '/^[0-9]/,$d' | paste -sd "," -
A, A, A, B, C
在这种情况下,这只是中间部分。那,或者将所有部分打印到一行。
最佳答案
更短的惯用 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
RS
是记录分隔符。默认为换行,这里设置为数字或逗号
OFS
是输出字段分隔符 = 带单个空格的逗号
RT
是使用中的记录分隔符值
ORS
是输出记录分隔符,默认换行
$1=$1
是一个惯用赋值,它强制 awk 根据 OFS、ORS 等的值重新计算字段和记录
(RT==","?OFS:ORS)
是一个基于synthax的三元if操作
(条件?真 Action :假 Action )
。
关于bash - 根据分隔符拆分文件,然后加入单独的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48292621/