Python 需要帮助来解析文件吗

Python 需要帮助来解析文件吗,python,linux,bash,Python,Linux,Bash,我们有一个包含以下信息的文件: 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.

我们有一个包含以下信息的文件:

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/*)
感谢您的帮助。提前感谢

awk救援:

$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语句只打印数组的内容


请注意…?:。。。如果。。。然后其他的用于在每个文件名之间添加逗号的语句。

您尝试了什么?你能发布代码吗?尝试了这个sed命令:sed':a;Ns/\n/,/;ta'file | se's/,Files/\n文件:/g'我的输出低于预期:文件:,许可证:LGPL-2+文件::po/bg.po,po/eo.po,po/sl.po,po/sv.po,po/th.po,po/tr.po,许可证:LGPL-2+文件::po/fi.po,许可证:LGPL-2+文件::po/te.po,许可证:LGPL-2+文件::po/vi.po,许可证:LGPL-2+文件::tls/tests/mock-pkcs11.,许可证:LGPL-2.1+进一步查看。感谢olive,这对我有用。但是输出中缺少一个文件tests/dbus1.c,即预期的:GPL-3+dbus-1/dconf-dbus-1.*,tests/gsettings.c tests/dbus1.c,但得到的是:GPL-3+dbus-1/dconf-dbus-1.*,tests/gsettings.cNow正在获取先前丢失的tests/dbus1.c文件。但是,所有文件在输出中观察2次。e、 g.GPL-3debian/*,debian/*@SandipGiri此时,应该是okI在输入文件中添加了新的许可证BSD 2子句。对于许可证BSD2条款,我们只获得BSD,但我们期望:BSD2条款。您能提供您的建议吗?@SandipGiri从字符串中删除空格,以获得类似BSD_2_子句的内容。如果不可能,请回答另一个问题,因为这超出了问题的范围。