【问题标题】:Formatting output in terminal, removing empty lines and convert comma在终端中格式化输出,删除空行并转换逗号
【发布时间】:2015-09-20 12:03:25
【问题描述】:

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

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 命令,但找不到解决方案。

【问题讨论】:

  • 啊抱歉打错了

标签: bash sed terminal formatting tr


【解决方案1】:

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

awk -v RS= -F '\n' -v OFS=, '{ $1 = $1 } 1' filename

诀窍在于各种特殊变量:

  • 空的RS 表示输入中的记录由空行分隔。
  • -F '\n'FS 设置为 \n,这意味着输入记录中的字段由换行符分隔。
  • OFS 设置为, 意味着字段将在输出中用逗号分隔。
  • ORS 默认为换行符,因此输出中的记录由换行符分隔。

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

你也可以用 sed 来做:

sed ':a /\n$/! { N; $! ba; }; s///; s/\n/,/g' filename

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

【讨论】:

    【解决方案2】:

    一种方法是使用paste:

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

    输出:

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

    【讨论】:

      【解决方案3】:

      这可能对你有用(GNU sed):

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-16
        • 1970-01-01
        • 2019-06-10
        • 1970-01-01
        • 2017-09-17
        • 2016-11-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多