행의 일부를 가져와 같은 행에 추가

행의 일부를 가져와 같은 행에 추가

다음과 같은 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를 사용하면 두 번째 파일로 출력하지 않고도 내부 기능을 사용할 수 있습니다. 예를 들어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

관련 정보