行の一部を取得して同じ行に追加

行の一部を取得して同じ行に追加

次の19,000行のファイルがあります。

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 を使用すると、2 番目のファイルに出力せずに内部機能を使用できます。例えば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

関連情報