특정 열의 마지막 n자를 제거하는 방법

특정 열의 마지막 n자를 제거하는 방법

파일이 있어요

had my.file
    Ha1_00044012__C 1 51035805 10.35639322
    Ha1_00045184__C 1 86676829 10.07929888
    Ha1_00045056__C 1 150178524 19.44076068
    Ha10_00000491__C 10 73473488 10.6038893
    Ha10_00000577__C 10 78976728 12.45451149
    Ha10_00002949__C 10 113658711 14.94370396
    Ha10_00001805__C 10 220068670 10.87452401

첫 번째 열에서 마지막 3문자 "__C"를 제거하고 싶습니다. 나는 노력했다

awk '{gsub(/[__c ]/,"",$1)}3'

그러나 첫 번째 열의 "_"는 모두 제거됩니다. 내가 원하는 출력은 다음과 같아야 합니다.

head desired
Ha1_00044012 1 51035805 10.35639322
Ha1_00045184 1 86676829 10.07929888
Ha1_00045056 1 150178524 19.44076068
Ha10_00000491 10 73473488 10.6038893
Ha10_00000577 10 78976728 12.45451149
Ha10_00002949 10 113658711 14.94370396
Ha10_00001805 10 220068670 10.87452401

답변1

주변의 대괄호는 [__c ]다음과 같습니다.놓다하나보다는주문하다성격. 이것을 사용하면 다음 gsub의 모든 _, c(소문자, 주석) 및 공백 문자 와 일치하고 대체됩니다.$1

__C다음을 사용하여 수행할 수 있는 시퀀스의 단일 인스턴스(대문자)를 바꾸려는 것 같습니다.sub(/__C/,"",$1)

대소 문자를 구분하지 않으려면 다음을 사용할 수 있습니다./__[Cc]/

답변2

텍스트가 충분히 엄격하여 __C제거하고 싶다면 다음을 사용하여 쉽게 제거할 수도 있습니다 sed.

$ sed 's/__C//' file
    Ha1_00044012 1 51035805 10.35639322
    Ha1_00045184 1 86676829 10.07929888
    Ha1_00045056 1 150178524 19.44076068
    Ha10_00000491 10 73473488 10.6038893
    Ha10_00000577 10 78976728 12.45451149
    Ha10_00002949 10 113658711 14.94370396
    Ha10_00001805 10 220068670 10.87452401

다음을 통해 추가 정리를 수행할 수 있습니다 sed.

$ sed 's/__C//;s/^[ ]*//g' a

이렇게 하면 각 줄의 시작 부분부터 까지 모든 선행 공백이 제거 H됩니다 Ha1.

답변3

다음을 사용하여 이 작업을 수행할 수 있습니다.

perl -lane '
  substr($F[0], -3) = ""; # remove the last 3 chars from the 1st field
  print "@F";             # print the fields, space separated
' my.file

답변4

bash-4.1$ awk -v ncr=3 '{$1=substr($1,0,length($1)-ncr)}1' test.txt
Ha1_00044012 1 51035805 10.35639322
Ha1_00045184 1 86676829 10.07929888
Ha1_00045056 1 150178524 19.44076068
Ha10_00000491 10 73473488 10.6038893
Ha10_00000577 10 78976728 12.45451149
Ha10_00002949 10 113658711 14.94370396
Ha10_00001805 10 220068670 10.87452401

ncr = 가변적입니다. 여기에서 특정 열에서 제거할 문자 수를 지정할 수 있습니다.

관련 정보