다음과 같은 파일이 있습니다.
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
다양한 변형으로
앗
awk '{$3=A[split($3,A,"-")]}1' file
sed
sed -r 's/((\S+\s+){2})[^- ]+-/\1/' file
답변3
사용 awk
:
< input awk 'BEGIN {FS=OFS=" "} {gsub(/[^-]*-/, "", $3); print}'