首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用awk创建csv时发出

使用awk创建csv时发出
EN

Unix & Linux用户
提问于 2019-05-16 08:07:33
回答 1查看 154关注 0票数 0

我正在尝试用AWK创建一个csv文件。我使用输出文件分隔符为列添加逗号。但是有一个列的名称用空格分隔,它也在输出中用逗号进行处理。

代码语言:javascript
复制
cat test.txt | head -n 3
Vulnerability ID        Package                                     Severity          Fix                     Vulnerability URL
CVE-2017-1000408        libc-bin-2.24-11+deb9u3                     High              2.24-11+deb9u4          https://security-tracker.debian.org/tracker/CVE-2017-1000408
CVE-2017-1000408        libc-dev-bin-2.24-11+deb9u3                 High              2.24-11+deb9u4          https://security-tracker.debian.org/tracker/CVE-2017-1000408

命令:

代码语言:javascript
复制
cat test.txt | awk -F' ' 'BEGIN{OFS=",";} {print $1,$2,$3,$4,$5;}' > file.csv

输出:

代码语言:javascript
复制
Vulnerability,ID,Package,Severity,Fix
CVE-2017-1000408,libc-bin-2.24-11+deb9u3,High,2.24-11+deb9u4,https://security-tracker.debian.org/tracker/CVE-2017-1000408
CVE-2017-1000408,libc-dev-bin-2.24-11+deb9u3,High,2.24-11+deb9u4,https://security-tracker.debian.org/tracker/CVE-2017-1000408

预期产出:

代码语言:javascript
复制
Vulnerability ID,Package,Severity,Fix,Vulnerability URL
CVE-2017-1000408,libc-bin-2.24-11+deb9u3,High,2.24-11+deb9u4,https://security-tracker.debian.org/tracker/CVE-2017-1000408
CVE-2017-1000408,libc-dev-bin-2.24-11+deb9u3,High,2.24-11+deb9u4,https://security-tracker.debian.org/tracker/CVE-2017-1000408
EN

回答 1

Unix & Linux用户

发布于 2019-05-16 10:02:40

我的建议是与文件的其他部分不同,详细说明标题行。在这种情况下:

代码语言:javascript
复制
awk 'NR==1 {$0=gensub(/(Vulnerability) (ID|URL)/, "\\1_\\2", "g"); print gensub(/(Vulnerability)_(ID|URL)/, "\\1 \\2", "g", $1","$2","$3","$4","$5)} NR>1 {print $1","$2","$3","$4","$5}' test.txt > file.csv

或者:

代码语言:javascript
复制
sed -r '1s/(Vulnerability) (ID|URL)/\1_\2/g' test.txt | awk '{print $1","$2","$3","$4","$5}' | sed -r '1s/(Vulnerability)_(ID|URL)/\1 \2/g' > file.csv

您在注释中收到了一些非常合适的建议,特别是关于拆分多个空格字符的建议,以及建议您使用其他工具操作CSV文件的建议。此外,如果您的问题仅存在于标题行中,如果我是您,我将手动修复它。And...do,您真的需要在标题中有空格(而不是Vulnerability_URL)?这完全取决于您的实际用例。

对我来说,在多个空间上分裂似乎是最容易的:

代码语言:javascript
复制
sed 's/   */,/g' test.txt > file.csv
票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/519212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档