세 번째 열에 이메일 주소가 포함된 파이프로 구분된 파일이 있습니다. 세 번째 열에 있는 이메일 주소의 도메인 이름에서 네 번째 열을 생성하려면 awk 또는 sed 명령을 사용하는 데 도움이 필요합니다.
입력 파일
TEST|1234|[email protected]
TEST|4533|[email protected]
TEST|9030|[email protected]
TEST|0903|[email protected]
예상 출력
TEST|1234|[email protected]|gmail.com
TEST|4533|[email protected]|yahoo.com
TEST|9030|[email protected]|gmx.com
TEST|0903|[email protected]|gmail.com
답변1
이 시도,
awk -F '@' '{print $0"|"$NF}' file
TEST|1234|[email protected]|gmail.com
TEST|4533|[email protected]|yahoo.com
TEST|9030|[email protected]|gmx.com
TEST|0903|[email protected]|gmail.com
답변2
사용 sed
:
$ sed 's/@\(.*\)/&|\1/' file
TEST|1234|[email protected]|gmail.com
TEST|4533|[email protected]|yahoo.com
TEST|9030|[email protected]|gmx.com
TEST|0903|[email protected]|gmail.com
이는 @
각 줄의 첫 번째 문자와 일치하고 캡처 그룹을 사용하여 그 이후의 모든 것을 캡처합니다. 일치하는 텍스트는 그 자체로 대체되고, 캡처된 텍스트가 |
그 사이에 한 문자씩 대체됩니다.
파일이 DOS 텍스트 파일인 경우(일부 설명에서 알 수 있듯이) 동일한 명령을 사용하여 이를 Unix 텍스트 파일로 변환할 수 있습니다.
$ sed -e 's/[[:cntrl:]]$//' -e 's/@\(.*\)/&|\1/' file
TEST|1234|[email protected]|gmail.com
TEST|4533|[email protected]|yahoo.com
TEST|9030|[email protected]|gmx.com
TEST|0903|[email protected]|gmail.com
두 번째 교체는 이전과 동일하지만 첫 번째 교체는 줄 끝에 있는 모든 제어 문자를 제거합니다(이렇게 하면 각 줄 끝에 캐리지 리턴 문자가 있는 경우 제거됩니다). 원본 파일이 DOS인지 Unix 텍스트 파일인지에 관계없이 마지막 명령의 출력은 Unix 텍스트 문서가 됩니다.
답변3
아래 스크립트를 사용해 보세요
for i in `cat o.txt`; do y=`echo $i |awk -F "|" '{print $NF}'| awk -F "@" '{print $NF}'`; echo $i | awk -v y="$y" '{print $0"|"y}'; done
산출
TEST|1234|[email protected]|gmail.com
TEST|4533|[email protected]|yahoo.com
TEST|9030|[email protected]|gmx.com
TEST|0903|[email protected]|gmail.com