특정 열의 특정 문자 앞의 문자 제거

특정 열의 특정 문자 앞의 문자 제거

다음과 같은 파일이 있습니다.

chr22   43089055    43089055    -   NM_017436   C   300 903delC
chr22   43089715-43089717   43089715-43089717   -   NM_017436   CTT 79

-3열 앞의 모든 문자를 제거하고 다음과 같은 출력을 얻고 싶습니다 .

chr22   43089055    43089055    -   NM_017436   C   300 903delC
chr22   43089715-43089717   43089717    -   NM_017436   CTT 79

awk '{$2+=0}1' file과거에 삭제된 문자를 사용한 적이 있지만 동일한 -기술을 사용하여 현재 문제를 해결할 수 있다고 생각하지 않습니다. 어떤 제안이 있으십니까?

답변1

Perl이 구조에 옵니다:

perl -lane 'BEGIN { $, = "\t" } $F[2] =~ s/.*-//; print @F' < file
  • -l개행 문자 추가print
  • -n입력을 한 줄씩 읽습니다.
  • -a각 줄을 공백으로 나누고 @F배열 채우기
  • $,인쇄 시 목록 구성원을 구분하고 탭으로 설정
  • s/.*-//대시 앞의 모든 것을 세 번째 열(0부터 인덱스된 배열)에 바인딩되는 아무것도 없는 것으로 바꿉니다.

답변2

다양한 변형으로

  1. awk '{$3=A[split($3,A,"-")]}1' file

  2. sed

    sed -r 's/((\S+\s+){2})[^- ]+-/\1/' file

답변3

사용 awk:

< input awk 'BEGIN {FS=OFS="   "} {gsub(/[^-]*-/, "", $3); print}'

관련 정보