Unix:如何将单独的列合并为一列

Unix: How to combine separate columns into one column

我创建了一个脚本,用于记录满足条件的电子邮件是否发送。

我使用 AWK 获取特定列得到以下输出。

[自动启动] 3 月 17 日 21:21:32 格林威治标准时间 2022

我想将它们转换为 csv,所以我使用下面的命令

cat logchkmail_all.txt | awk '{print ,,,,,}' | awk 'NR>1{=}1' OFS="," > sample.csv

...有效,但它 returns

[AUTORESTART],2022 年 3 月,21:21:32,格林威治标准时间

这是应该的。但我想要的是能够将 [AUTORESTART] 分开,然后合并第 6-10 列,这样它总共只有 2 列,一列带有 [AUTORESTART],另一列带有“Mar 17 21:21:32 GMT 2022”作为一列。

有办法吗?

这样的东西行得通吗?至少如果你不需要在一个管道命令中全部使用:

newstring=`echo $mystring | cut -d' ' -f1`
newstring="$newstring,`echo $mystring | cut -d' ' -f2-`"

echo $newstring # prints out [AUTORESTART],Mar 17 21:21:32 GMT 2022

您可以在 awk 打印命令中输入字符串文字。

这是一个例子:

$ cat a
1 2 3 [AUTORESTART] Mar 17 21:21:32 GMT 2022
$ cat a | awk '{print  ","  " "  " "  " "  " " }'
[AUTORESTART],17 21:21:32 GMT 2022

你可以看到我打印了第 4 列,然后是文字逗号,然后是第 6 列,然后是文字 space,依此类推,直到第 10 列

然后您可以将其重定向到 csv 文件

$ cat a | awk '{print  ","  " "  " "  " "  " " }' > mycsv.csv

我将在这种情况下使用 sed,因为您只想替换第一个白色 space:

echo '[AUTORESTART] Mar 17 21:21:32 GMT 2022' | sed 's/ /,/'
[AUTORESTART],Mar 17 21:21:32 GMT 2022