나는 다음과 같은 정보를 가지고 있습니다 :
'>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
하고 첫 번째 필드의 개행 문자를 제거합니다. 완벽한.