格式化终端输出,删除空行并转换逗号

时间:2015-07-02 19:45:53

标签: bash sed terminal formatting tr

我有这样的输出。我需要格式化输出。

a
b
c

d
e
f
g
h

k
l
m
n

我需要删除空行和结束行。
并像这样格式化输出。

a,b,c
d,e,f,g,h
k,l,m,n

我尝试了不同的sed和tr命令,但我找不到解决方案。

3 个答案:

答案 0 :(得分:3)

我认为最简单的方法是使用awk:

SELECT

[Dim product area].[Prod area].children ON 0,

[Dim periods].[Dates].children ON 1

FROM [cubename]

诀窍在于各种特殊变量:

  • awk -v RS= -F '\n' -v OFS=, '{ $1 = $1 } 1' filename 表示输入中的记录由空行分隔。
  • RS-F '\n'设置为FS,这意味着输入记录中的字段由换行符分隔。
  • \n设置为OFS表示字段将在输出中用逗号分隔。
  • 默认情况下,
  • ,是换行符,因此输出中的记录由换行符分隔。

在代码中,ORS强制awk重新组合记录,以便实际应用所有这些。结果是记录被读取为由空行分隔的新行分隔的记录字段,并打印为以换行分隔的新行分隔记录字段(即CSV)。

您也可以使用sed:

$1 = $1

这会读取新行并将它们附加到模式空间,直到找到空行或文件末尾,然后删除最后的额外换行符(如果它在那里,它就赢了文件的结尾)并用逗号替换剩余的换行符。请注意,我不建议这样做,因为awk在概念上更适合。毕竟,输入数据是表格式的,awk非常擅长处理这类数据。

答案 1 :(得分:1)

一种方法是使用paste

paste -sd, file | sed 's/,,,*/\n/g'

输出:

a,b,c,d
e,f,g,h
k,l,m,n

答案 2 :(得分:0)

这可能适合你(GNU sed):

sed ':a;N;/\n$/!s/\n/,/;ta;P;d' file