기본적으로 아래 예와 동일한 1/2백만 줄의 텍스트가 포함된 서식을 지정하는 문서가 있습니다. 다음과 같이 두 글자 사이의 탭을 제거해야 합니다.
rs207460002 26 15579 T A
rs207459997 26 15615 G C
rs527236190 26 15637 T C
다음과 같이 됩니다:
rs207460002 26 15579 TA
rs207459997 26 15615 GC
rs527236190 26 15637 TC
어떤 해결책이라도 대단히 감사하겠습니다!
참고: 이는 5개의 탭 열입니다.
답변1
다른 awk
방법:
awk '{cpy=$NF; NF--; print $0 cpy }' OFS='\t' infile
이는 마지막 필드의 복사본을 $NF
변수라는 이름으로 cpy
만들고 NF--
현재 입력 줄에서 마지막 필드를 제거합니다 . 그 다음에는 그 뒤의 줄을 $0
인쇄합니다 . 지정$0
cpy
OFS='\t'
산소산출에프생산하다에스쪼개는 도구.
또는 sed
:
sed 's/\t\([A-Z]\)$/\1/' infile
이는 ab 에서 일치하는 그룹을 캡처한 \t
다음 각 줄 끝에 단일 알파벳 문자를 캡처하고 \1
일치하는 알파벳 문자만 거꾸로 참조하며 대체 부분에서는 문자와 \t
ab만 제거합니다.
답변2
$ awk '{ print $1 "\t" $2 "\t" $3 "\t" $4 $5 }' input.txt
rs207460002 26 15579 TA
rs207459997 26 15615 GC
rs527236190 26 15637 TC
답변3
답변
sed -ri "s/([A-Z])\t([A-Z])$/\1\2/" your_file
설명하다
-r
- 정규식 확장을 사용합니다. (공백 시퀀스를 사용하지 않고 정규식에서 특정 문자를 사용할 수 있습니다)
-i
- 파일의 변경 사항을 유지하고 쓰지 마십시오 stdout
.
s/([A-Z])\t([A-Z])$/\1\2/
- [capital_letter][TAB_key][capital_letter]
줄 끝에서 일치하고 일치하는 것으로 대체됩니다 [capital_letter][capital_letter]
.
your_file
- 처리하려는 파일 sed
.
답변4
이 도구를 사용하면 sed
쉽습니다.
sed -e 's/\t//4' input_file
설명하다:
\t
역할을 표현한 것입니다TAB
. GNU sed에서는 괜찮습니다. OTW는 리터럴 TAB을 사용합니다.s/\t//4
이는 현재 줄에서 네 번째로 나타나는 TAB 문자를 제거하는 것을 의미합니다.
둘러보기를 사용할 Perl
수 있습니다.
perl -pe 's/\t(?!.*\t)//' input_file
설명하다:
-p
Perl이 한 줄씩 읽도록 하고 자동으로 줄을 인쇄합니다.s/\t(?!.*\t)//
정규식은 Perl에게 오른쪽에 다른 TAB가 표시되지 않는 TAB 문자를 찾도록 지시합니다. 이는 이것이 마지막 TAB임을 의미합니다. 그런 다음 TAB이 삭제됩니다.