파일이 있어요
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 = 가변적입니다. 여기에서 특정 열에서 제거할 문자 수를 지정할 수 있습니다.