将行的特定部分中的空格替换为逗号

将行的特定部分中的空格替换为逗号

这是数据库查询的输出:

    1 KALI,REGISTERED
    2 KALI,PROCESSING
    3 KALI,RECEIVED
    1 KALI,SUBMITTED
    7 KALI,SUCCEEDED
    4 WEKA,PROCESSING

输出每次都会变化,行数可能与上次运行查询时不同,但格式始终如下所示:number space word,word。我需要它们是这样的:number,word,word。我尝试用查询本身来处理这个问题,但是数据库不支持这个,所以我决定用 Linux 来处理这个问题。我用这个命令用逗号替换空格:sed -e 's/\s\+/,/g' command.output.我得到这个输出:

,1,KALI,REGISTERED,
,2,KALI,PROCESSING,
,3,KALI,RECEIVED,
,1,KALI,SUBMITTED,
,7,KALI,SUCCEEDED,
,4,WEKA,PROCESSING,  

但我期望这样的东西,这样我就可以将它存储在数组中:

1,KALI,REGISTERED
2,KALI,PROCESSING
3,KALI,RECEIVED
1,KALI,SUBMITTED
7,KALI,SUCCEEDED
4,WEKA,PROCESSING  

尝试了更多命令,但没有一个起作用。我怎样才能得到这个输出?

答案1

理想情况下,您应该更改数据库查询以按照您需要的格式输出数据。

$ awk -v OFS=',' '{ $1 = $1; print }' file
1,KALI,REGISTERED
2,KALI,PROCESSING
3,KALI,RECEIVED
1,KALI,SUBMITTED
7,KALI,SUCCEEDED
4,WEKA,PROCESSING

这用于awk将空格或制表符分隔的数据重新格式化为逗号分隔。通过将OFS输出字段分隔符设置为逗号,然后修改每个输入记录中的字段值,awk将使用新的输出分隔符重新创建记录。打印它会得到想要的输出。

awk默认情况下,在读取每行时还会忽略每行上的任何前导或尾随空格。

如果您想使用 执行此操作sed,请首先删除所有初始空格,然后将第一个剩余空格更改为逗号:

$ sed -e 's/^[[:blank:]]*//' -e 's/[[:blank:]]/,/' file
1,KALI,REGISTERED
2,KALI,PROCESSING
3,KALI,RECEIVED
1,KALI,SUBMITTED
7,KALI,SUCCEEDED
4,WEKA,PROCESSING

[[:blank:]]模式匹配空格或制表符(就像\sPerl 正则表达式中的那样)。我出于习惯使用它,但您可能想使用单个文字空格,除非您实际上正在处理制表符(问题中不清楚)。您还可以将两个sed表达式写在同一个参数中:

sed 's/^ *//; s/ /,/' file

相关内容