Como remover os últimos n caracteres de uma coluna específica

1

Eu tenho um arquivo

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

Eu quero remover os três últimos caracteres "__C" da primeira coluna. Eu tentei

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

mas remove todos os "_" na coluna um. minha saída desejada deve ficar assim:

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
    
por Anna1364 31.07.2018 / 01:07

4 respostas

2

Se o texto for rígido o suficiente para que seja apenas __C que você deseja remover, você pode fazer isso facilmente usando 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

Mais limpeza pode ser feita com sed :

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

Isso removeria todos os espaços iniciais começando no início de cada linha, até o H in Ha1 .

    
por 31.07.2018 / 02:19
1

Os colchetes em torno de [__c ] o transformam em um conjunto ao invés de uma seqüência de caracteres. Com gsub , isso fará com que ele corresponda (e substitua) a cada _ , c (minúscula, nota) e caractere de espaço em $1

O que você parece querer é substituir uma única instância da sequência __C (maiúscula), o que você pode fazer com sub(/__C/,"",$1)

Se você precisar insensibilizar maiúsculas e minúsculas, use /__[Cc]/

    
por 31.07.2018 / 01:27
0

Você pode fazer isso da seguinte maneira:

perl -lane '
  substr($F[0], -3) = ""; # remove the last 3 chars from the 1st field
  print "@F";             # print the fields, space separated
' my.file
    
por 31.07.2018 / 10:03
0
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 = é variável. aqui você pode especificar quantos caracteres deseja remover da coluna em particular.

    
por 31.07.2018 / 10:09