첫 번째 열에서만 확장명 제거

첫 번째 열에서만 확장명 제거

탭으로 구분된 두 개의 열이 있는 다음과 같은 파일이 있습니다.

 ENSG00000242268.2    0.07563
 ENSG00000270112.3    0.09976
 ENSG00000167578.15   4.38608
 ENSG00000273842.1    0.0
 ENSG00000078237.5    4.08856

첫 번째 열 끝에서 숫자 확장자를 제거하고 싶으므로 출력은 다음과 같습니다.

 ENSG00000242268    0.07563
 ENSG00000270112    0.09976
 ENSG00000167578    4.38608
 ENSG00000273842    0.0
 ENSG00000078237    4.08856

단순히 첫 번째 열 값만 반환하고 sed 's/\..*$//'필드 구분 기호 '.'와 함께 awk를 사용하면 awk -F'.'소수점이 있기 때문에 두 번째 열의 값도 제거됩니다.

비슷한 질문에 대한 답변이 여기에 있습니다: 열에서 확장명 제거

아직 첫 번째 열만 삭제할 수는 없습니다.

답변1

해결책:

awk -F'\t' '{sub(/\..+$/,"",$1)}1' OFS='\t' file
  • -F'\t'- 필드 구분 기호

  • sub(/\..+$/,"",$1)- .첫 번째 필드에서 다음 문자를 즉시 ​​제거합니다.

산출:

ENSG00000242268 0.07563
ENSG00000270112 0.09976
ENSG00000167578 4.38608
ENSG00000273842 0.0
ENSG00000078237 4.08856

아니면 간단하게 사용하세요sed방법:

sed 's/\.[0-9]*//' file

답변2

그냥 해:

sed 's/\(.[0-9]\+\) / /' 

소수점 첫째 부분만 일치하여 제거합니다.

샘플에서:

echo "ENSG00000242268.2    0.07563
>  ENSG00000270112.3    0.09976
>  ENSG00000167578.15   4.38608
>  ENSG00000273842.1    0.0
>  ENSG00000078237.5    4.08856" | sed 's/\(.[0-9]\+\) / /'
ENSG00000242268    0.07563
ENSG00000270112    0.09976
ENSG00000167578   4.38608

탭이 있는 경우 편집하고 다음을 시도해 보세요.

sed 's/\(.[0-9]\+\)\( \|\t\)\2/' 

답변3

우리는 일치 할 수 있습니다버전이 지정된 Ensembl 인간 유전자 "안정적" ID확장된 정규 표현식을 사용합니다 ENSG[0-9]{11}\.[0-9]+.

다음과 함께 사용하세요 sed.

$ sed -r 's/(ENSG[0-9]{11})\.[0-9]+/\1/' file.in >file.out

이는 열 사이의 구분 기호나 행에서 식별자가 나타나는 위치에 의존하지 않습니다.

답변4

배쉬와 함께 사용하위 문자열 삭제:

#!/usr/bin/env bash

file='file.txt'

while read -r i; do

  a=$( <<< "${i}" cut -d $'\t' -f 1 )
  a=${a%.*}
  b=$( <<< "${i}" cut -d $'\t' -f 2- )

  printf '%s\t%s\n' "${a}" "${b}"

done < "${file}"

관련 정보