첫 번째 열에서만 패턴 제거

첫 번째 열에서만 패턴 제거

나는 다음과 같은 정보를 가지고 있습니다 :

'>16_R_I_1_0 M01230:42:000000000-AWMRD:1:1101:15012:1778 1:N:0:0 orig_bc=CGGAGCTATGGT new_bc=CGGAGCTATGGT bc_diffs=0  
'>0_V_I_2_2 M01230:42:000000000-AWMRD:1:1101:16237:1790 1:N:0:0 orig_bc=CTAGCGAACATC new_bc=CTAGCGAACATC bc_diffs=0

첫 번째 열에서 "_"을 제거하고 싶습니다. 다음과 같은 명령을 사용했지만 sed "$1=/s/\_//g"작동하지 않습니다. 나는 다음과 같은 출력을 원합니다 :

'>16RI10 M01230:42:000000000-AWMRD:1:1101:15012:1778 1:N:0:0 orig_bc=CGGAGCTATGGT new_bc=CGGAGCTATGGT bc_diffs=0  
'>0VI22 M01230:42:000000000-AWMRD:1:1101:16237:1790 1:N:0:0 orig_bc=CTAGCGAACATC new_bc=CTAGCGAACATC bc_diffs=0

어떤 제안이라도 부탁드립니다

답변1

awk '{ gsub("_", "", $1); print }'

설명하다:

awk '{                         for each line
      gsub(                    globally replace
           "_", ""             underscore by the empty string
           $1);                in the first column
      print                    and print the modified line
     }'

답변2

sed -e ':a;s/^\( *[^ _]*\)_/\1/;ta' data.genefile

_입력 유전자 파일의 첫 번째 필드에서만 모든 항목을 제거합니다.


진주

perl -F'(\s+)' -lne 'print map { /\S/ && !$a++ && s/_//g; $_ } @F' datagene.txt

설명하다

  • -F'(\s+)'=> FS= 하나 이상의 공백. 이제 필드 배열에 @F정상적인 상황에서 손실되는 중간 공백이 포함되므로 괄호는 동작을 수정합니다. 우리는 변경 전후에 화이트소스를 유지하기 위해 이렇게 합니다.
  • map { ... }@F이 명령은 필드 배열 요소에 하나씩 작동하여 비어 있지 않은 첫 번째 필드만 작동되도록 부울 논리를 배치합니다.

답변3

sed 'h;s/ .*//;s/_//g;G;s/\n[^ ]*//'

설명: h예약된 공간에 행을 복사합니다. 첫 번째는 s첫 번째 필드를 제외한 모든 것을 제거하고, 두 번째는 필요한 교체를 수행합니다. 그런 다음 예약된 공간을 추가 G하고 첫 번째 필드의 개행 문자를 제거합니다. 완벽한.

관련 정보