유사한 많은 텍스트 줄에서 두 열 사이의 탭 문자를 제거하는 방법은 무엇입니까?

유사한 많은 텍스트 줄에서 두 열 사이의 탭 문자를 제거하는 방법은 무엇입니까?

기본적으로 아래 예와 동일한 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인쇄합니다 . 지정$0cpyOFS='\t'산소산출에프생산하다에스쪼개는 도구.

또는 sed:

sed 's/\t\([A-Z]\)$/\1/' infile

이는 ab 에서 일치하는 그룹을 캡처한 \t다음 각 줄 끝에 단일 알파벳 문자를 캡처하고 \1일치하는 알파벳 문자만 거꾸로 참조하며 대체 부분에서는 문자와 \tab만 제거합니다.

답변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

설명하다:

  • -pPerl이 한 줄씩 읽도록 하고 자동으로 줄을 인쇄합니다.

  • s/\t(?!.*\t)//정규식은 Perl에게 오른쪽에 다른 TAB가 표시되지 않는 TAB 문자를 찾도록 지시합니다. 이는 이것이 마지막 TAB임을 의미합니다. 그런 다음 TAB이 삭제됩니다.

관련 정보