탭으로 구분된 두 개의 열이 있는 다음과 같은 파일이 있습니다.
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}"