我们有一个包含以下信息的文件:
Files: *
License: LGPL-2+
Files: po/bg.po
po/eo.po
po/sl.po
po/sv.po
po/th.po
po/tr.po
License: LGPL-2+
Files: po/te.po
License: LGPL-2+
Files: po/vi.po
License: LGPL-2+
Files: tls/tests/mock-pkcs11.*
License: LGPL-2.1+
Files: dbus-1/dconf-dbus-1.*
tests/gsettings.c tests/dbus1.c
License: GPL-3+
Files: debian/*
License: GPL-3
Files: po/fi.po
License: LGPL-2+
我想合并所有具有相同许可证的文件,以以下格式查找输出:
LGPL-2+(*,po/bg.po,po/eo.po,po/sl.po,po/sv.po,po/th.po,po/tr.po,po/fi.po,po/te.po,po/vi.po),LGPL-2.1+(tls/tests/mock-pkcs11.*),
GPL-3+(dbus-1/dconf-dbus-1.*,tests/gsettings.c tests/dbus1.c),GPL-3(debian/*)
----或----
LGPL-2+(*,po/bg.po,po/eo.po,po/sl.po,po/sv.po,po/th.po,po/tr.po,po/fi.po,po/te.po,po/vi.po)
LGPL-2.1+(tls/tests/mock-pkcs11.*)
GPL-3+(dbus-1/dconf-dbus-1.*,tests/gsettings.c tests/dbus1.c)
GPL-3(debian/*)
任何帮助都将不胜感激。谢谢!!
答案 0 :(得分:0)
求助:
$1=="License:"{
a[$2]=a[$2](a[$2]?",":"")f;
next
}
$1=="Files:"{
f=$2
next
}
{
for(i=1;i<=NF;i++)
f=f (f?",":"")$i
}
END{
for(i in a)
printf "%s(%s)\n",i,a[i]
}
变量f
用文件名填充。找到关键字License:
时,变量f
中的所有文件都将复制到数组a
中。
END
语句仅显示数组的内容。
请注意(...?...:...)
,它是C语言内嵌样式if ... then ... else ...
,用于在每个文件名之间添加逗号,
。