첫 번째 열에 다음과 같은 항목이 포함된 탭으로 구분된 파일이 있습니다.
sp|O00253|AGRP_HUMAN
awk
열 1의 s 사이의 텍스트 |
와 나머지 열의 나머지 텍스트만 변경되지 않은 새 파일을 출력하는 데 사용하려고 합니다 .
정규식
/\w{2}\|(\w+)\|\w+/
O00253
캡처 그룹에서 원하는 text()와 일치 하지만 사용할 $1
수 없습니다 .awk
gensub
아래 줄 주위에서 여러 번 반복을 시도했지만 모든 것이 변경되지 않은 캡처 그룹을 반환합니다.
awk 'gensub(/\w{2}\|(\w+)\|\w+/,"\\1","g",$1) {print}'
awk '{print gensub(/\w{2}\|(\w+)\|\w+/,"\\1","g",$0)}'
내가 무엇을 놓치고 있나요?
답변1
두 번째 솔루션은 여기서 잘 작동합니다. 첫 번째 이유는 다음과 같습니다.gensub
함수의 결과로 수정된 문자열을 반환합니다. 원래 대상 문자열은 변경되지 않습니다..1
결과를 변수에 할당한 다음 업데이트할 수 있습니다 $1
.
awk '{x=gensub(/\w{2}\|(\w+)\|\w+/,"\\1","1",$1);$1=x};1' infile
나는 이것을 할 것이지만 :
awk '{split($1,arr,"|");$1=arr[2]};1' infile