这是数据库查询的输出:
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:]]
模式匹配空格或制表符(就像\s
Perl 正则表达式中的那样)。我出于习惯使用它,但您可能想使用单个文字空格,除非您实际上正在处理制表符(问题中不清楚)。您还可以将两个sed
表达式写在同一个参数中:
sed 's/^ *//; s/ /,/' file