我正在尝试获取所有CVE和我的Erratas的列表,CVE列用逗号分隔。我需要用换行符分隔,并输出相应的勘误表
我可以使用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
,它产生了我想要的结果,谢谢!
答案 0 :(得分:2)
使用GNU awk:
awk '{errata=$1; for(i=2; i<=NF; i++) {print errata,$i}}' FS=',? +' OFS=' ' 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-3636
请参见The Stack Overflow Regular Expressions FAQ和8 Powerful Awk Built-in Variables – FS, OFS, RS, ORS, NR, NF, FILENAME, FNR
答案 1 :(得分:0)
这可能对您有用(GNU sed):
sed -E 's/^((\S+\s+)[^,]+),\s*/\1\n\2/;P;D' file
用换行符替换第一个字段及其在行中每个逗号的间距。
答案 2 :(得分:0)
Cyrus帖子的变体:
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-3636