vcf 파일에서 특정 패턴 뒤의 나머지 각 줄을 삭제하는 방법은 무엇입니까?

vcf 파일에서 특정 패턴 뒤의 나머지 각 줄을 삭제하는 방법은 무엇입니까?

:vcf 파일의 각 줄에 로그인한 후 숫자를 제거하는 방법 예:

0|0:0.81        0|1:0.81        0|0:0.76        0|0:0.83
0|1:0.99        0|0:0.03        0|0:0.83        0|0:0.2

출력은 다음과 같아야 합니다.

0|0        0|1        0|0        0|0
0|1        0|0        0|0        0|0

다음을 시도했지만 처음 이후의 모든 것이 제거됩니다.:

sed 's/[:].*$//' file.vcf 

답변1

에서 삭제 :하고 그 바로 뒤에 가능한 한 많은 숫자 또는 점 문자를 삭제하려고 합니다.

$ sed 's/:[0-9.]*//g' file.vcf
0|0        0|1        0|0        0|0
0|1        0|0        0|0        0|0

g또한 각 줄에서 일치하는 모든 하위 문자열에 대한 대체를 반복하려면 마지막에 이 정보가 필요합니다 .


당신의 명령,

sed 's/[:].*$//' file.vcf 

:첫 번째 문자와 일치 한 다음줄 끝까지의 문자 수. 이것이 당신이 끝나는 이유입니다

0|0
0|1

출력으로.

이 표현과 제가 제안한 표현의 차이점은 (모든 단일 문자와 일치함)인데 , 실제로 삭제하려는 문자 집합을 제한하기 위해 .이 표현을 변경했습니다 . 또한 줄 중간에 있는 항목도 삭제해야 하기 때문에 [0-9.]패턴을 줄 끝에 고정할 수 없습니다 . $그리고 g마지막에는 이미 언급했습니다.

관련 정보