我正在尝试获取所有CVEs和Erratas的列表,CVE列是逗号分隔的。我需要用换行符分隔,也需要输出相应的Errata。
我可以使用sed或awk来完成这一任务,但不确定如何开始。
当前产出:
RHSA-2017:3221 CVE-2016-10167, CVE-2016-10168
RHSA-2015:2369 CVE-2015-3248
RHSA-2015:1534 CVE-2014-9715, CVE-2015-2666, CVE-2015-2922, CVE-2015-3636期望产出:
RHSA-2017:3221 CVE-2016-10167
RHSA-2017:3221 CVE-2016-10168
RHSA-2015:2369 CVE-2015-3248
RHSA-2015:1534 CVE-2014-9715
RHSA-2015:1534 CVE-2015-2666
RHSA-2015:1534 CVE-2015-2922
RHSA-2015:1534 CVE-2015-3636更新(解决了):awk '{errata=$1; for(i=2; i<NF; i++) {print errata,$i}}' FS=',? +' OFS=' ' /C/Temp/ERRATACVETEST.txt我改变了赛勒斯的一点,我把i<=NF改成了i<NF,它产生了我想要的结果,谢谢!
发布于 2019-09-11 23:12:40
这可能对您有用(GNU sed):
sed -E 's/^((\S+\s+)[^,]+),\s*/\1\n\2/;P;D' file用换行符和第一个字段及其间距替换行中的每个逗号。
发布于 2019-09-12 06:47:34
赛勒斯柱的变体:
awk -F',? *' '{for (i=2;i<=NF;i++) print $1,$i}' file
RHSA-2017:3221 CVE-2016-10167
RHSA-2017:3221 CVE-2016-10168
RHSA-2015:2369 CVE-2015-3248
RHSA-2015:1534 CVE-2014-9715
RHSA-2015:1534 CVE-2015-2666
RHSA-2015:1534 CVE-2015-2922
RHSA-2015:1534 CVE-2015-3636https://stackoverflow.com/questions/57895462
复制相似问题