获取行的一部分并附加到同一行

获取行的一部分并附加到同一行

我有一个包含 19k 行的文件,如下所示:

a96abbb5da0985983e113a9a7484c063  management/modules/membership/file1
d7f7dd7e3ede3e323fc0e09381f16caf  management/modules/invoices/path/file2

但是,我想在行尾附加模块名称。所以结果是:

a96abbb5da0985983e113a9a7484c063  management/modules/membership/file1  membership
d7f7dd7e3ede3e323fc0e09381f16caf  management/modules/invoices/path/file2  invoices

有没有办法用例如sed或类似的东西来做到这一点?最好没有额外的文件,使用-i.

模块名称始终位于以下格式的路径中:modules/MODULENAME

答案1

awk解决方案。

$ awk -F/ '{print $0"  "$3}' file
a96abbb5da0985983e113a9a7484c063  management/modules/membership/file1  membership
d7f7dd7e3ede3e323fc0e09381f16caf  management/modules/invoices/path/file2  invoices
$

如果使用 gnu awk,您可以使用就地功能,而不必输出到第二个文件。例如awk -i inplace -F/ '{print $0" "$3}' file

答案2

使用 sed,抓住下一个斜杠分隔的字段,并将其粘贴在末尾:

sed -r 's,modules/([^/]*)/.*,&  \1,' file

答案3

尝试

sed -i 'h; s#^.*modules/# #; s#/.*$##; H; x; s#\n##;' file

相关内容