awk를 사용하여 열에서 기호를 제거하는 방법

awk를 사용하여 열에서 기호를 제거하는 방법

다음과 같은 데이터가 있습니다.

chr1    134901  139379  -   "ENSG00000237683.5";
chr1    860260  879955  +   "ENSG00000187634.6";
chr1    861264  866445  -   "ENSG00000268179.1";
chr1    879584  894689  -   "ENSG00000188976.6";
chr1    895967  901095  +   "ENSG00000187961.9";

GTF 파일을 구문 분석하여 생성했습니다.

가능하다면 awk 또는 sed를 사용하여 5열의 합계를 제거하고 싶습니다 ". ;결과는 다음과 같습니다.

chr1    134901  139379  -   ENSG00000237683.5
chr1    860260  879955  +   ENSG00000187634.6
chr1    861264  866445  -   ENSG00000268179.1
chr1    879584  894689  -   ENSG00000188976.6
chr1    895967  901095  +   ENSG00000187961.9

답변1

사용gsub:

awk '{gsub(/\"|\;/,"")}1' file
chr1    134901  139379  -   ENSG00000237683.5
chr1    860260  879955  +   ENSG00000187634.6
chr1    861264  866445  -   ENSG00000268179.1
chr1    879584  894689  -   ENSG00000188976.6
chr1    895967  901095  +   ENSG00000187961.9

달리고 싶다면오직다섯 번째 필드에서는 다른 필드에 따옴표나 세미콜론을 유지합니다.

awk '{gsub(/\"|\;/,"",$5)}1' file 

답변2

데이터가 표시된 대로 정확하게 형식화된 경우(즉, 다른 항목 "이나 ;다른 열을 보존할 필요가 없는 경우) 다음 tr을 사용하여 해당 문자를 간단히 제거할 수 있습니다.

tr -d '";' < input.txt > output.txt

답변3

sed를 사용하여 '";'의 모든 인스턴스를 제거합니다. sed -i 's/[";]//g' file

다섯 번째 열에서 sed를 제거하는 것만으로는 최선의 선택이 아닐 수 있습니다.

답변4

sed 솔루션, 다섯 번째 열만 다루도록 합니다.

sed -E 's/^(([^ ]+ +){4})"([^"]+)";$/\1\3/' infile
chr1    134901  139379  -   ENSG00000237683.5
chr1    860260  879955  +   ENSG00000187634.6
chr1    861264  866445  -   ENSG00000268179.1
chr1    879584  894689  -   ENSG00000188976.6
chr1    895967  901095  +   ENSG00000187961.9

이는 ERE( -E또는 -r일부 이전 sed) 없이 작동하지만 더 많은 백슬래시가 필요합니다. POSIX 사양 1+ 에 따르면 -정량자는 ERE 전용이며 BRE 로 대체 (또는 사용)될 수 있습니다.{1,}\{1,\}

열이 공백으로 구분되지 않은 경우 공백을 POSIX 문자 클래스로 대체하여 [:blank:]탭 문자와도 일치시킬 수 있습니다.

정규식 세부정보:

^               # Anchored at start of line
(               # Capture group 1 for first 4 columns
    (           # Capture group 2 for repeat count
        [^ ]+   # 1 or more non-spaces
         +      # 1 or more spaces
    ){4}        # 4 times "word plus spaces" (columns)
)               # End capture group 1
"               # Column 5 starts with double quote (not captured)
(               # Capture group 3 for column 5
    [^"]+       # One or more non-quote characters
)               # End capture group 3
";              # Quote and semicolon at end of column 5
$               # Anchored at end of line

1 GNU sed는 \+BRE에서도 확장으로 허용됩니다.

관련 정보