【问题标题】:breaklines and blank spaces断线和空格
【发布时间】:2021-11-05 14:21:18
【问题描述】:

在文件外壳中,我有以下内容:

看起来像:

BCTS1
                             ,07/09/2021                    ,
        09:06:26                      ,09:09:26                      ,
        0 horas con 3 minutos

我希望它看起来像:

BCTS1,07/09/2021,09:06:26,09:09:26,0 horas con 3 minutos

几个断线和空格。

谁能帮忙?

【问题讨论】:

  • 这句话好像少了一个动词:“几个断线和空格。
  • 字段可以出现换行符吗?例如,您可以在输入中包含0 horas<newline>con 3 minutos 吗?如果是这样,应该如何处理 - 删除换行符或用空格或其他东西替换?

标签: awk sed tr


【解决方案1】:

给定:

cat file
BCTS1
                ,07/09/2021                    ,
    09:06:26                      ,09:09:26                      ,
    0 horas con 3 minutos

您的最简单替换是使用 Perl:

perl -0777 -pe 's/\s*,\s*/,/g' file
BCTS1,07/09/2021,09:06:26,09:09:26,0 horas con 3 minutos

或者,您可以使用cat trsed

cat file | tr -d '\n' | sed 's/[[:space:]]*,[[:space:]]*/,/g'
# same output

或使用任何 POSIX awk:

cat file | tr -d '\n' | awk '{gsub(/[[:space:]]*,[[:space:]]*/,",")} 1'

使用 GNU sed:

sed -Ez 's/\s*,\s*/,/g' file

【讨论】:

  • 您也可以使用单个sedsed -Ez 's/\s*,\s*/,/g'(我怀疑对于大文件,行缓冲可能行为不端,但其他解决方案同样值得怀疑,除了 Perl,我不是足够熟悉)。
  • cat file | 解决方案具有 UUOC,tr -d '\n' 将输入转换为不再是有效的 POSIX 测试文件的内容,因此 YMMV 与任何后续文本处理工具所做的一样。跨度>
【解决方案2】:

使用任何 POSIX awk

$ awk -v RS= -F'[[:space:]]*,[[:space:]]*' -v OFS=',' '{$1=$1}1' file
BCTS1,07/09/2021,09:06:26,09:09:26,0 horas con 3 minutos

如果您没有 POSIX awk(对于 [:space:] 字符类),那么:

$ awk -v RS= -F'[ \t\n]*,[ \t\n]*' -v OFS=',' '{$1=$1}1' file
BCTS1,07/09/2021,09:06:26,09:09:26,0 horas con 3 minutos

以上假设与您发布的示例一样,您的输入中没有任何空行。如果你这样做了,那么你可以将它与 GNU awk 一起使用(用于多字符 RS 和 \s 速记):

$ awk -v RS='^$' -v ORS= -F'\\s*,\\s*' -v OFS=',' '{$1=$1}1' file
BCTS1,07/09/2021,09:06:26,09:09:26,0 horas con 3 minutos

或者这个和任何 awk:

$ awk '{r=r $0 OFS} END{$0=r; gsub(/[ \t]*,[ \t]*/,","); print}' file
BCTS1,07/09/2021,09:06:26,09:09:26,0 horas con 3 minutos

【讨论】:

    猜你喜欢
    • 2012-01-18
    • 2012-04-21
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-03
    相关资源
    最近更新 更多