Substituindo uma string de teste por outra em uma coluna específica

Substituindo uma string de teste por outra em uma coluna específica

Gostaria de substituir "CC" por "C" e "AA" por A" em uma coluna específica do arquivo delimitado por tabulação (usando awkprovavelmente).

Responder1

awk -F'\t' -vOFS='\t' '{ gsub("CC", "C", $1) ; gsub("AA", "A", $1) ; print }'

Substitua $1pela coluna que você deseja modificar.

Responder2

Se você não tinha acesso gsub(), mas tem acesso split(), você poderia simplesmente criar o equivalente assim:

Dada a entrada

AA      AA      CC      CC      AA      CC

o seguinte awkroteiro

BEGIN {
    OFS = "\t";
    split("1 3 5", Fields);
    split("A C", Replacements);
}
{
    for (i in Fields) {
        for (j in Replacements) {
            Replace = Replacements[j];
            sub(Replace Replace, Replace, $Fields[i]);
        }
    }
    print;
}

produziria os resultados desejados para os campos 1, 3 e 5:

A       AA      C       CC      A       CC

Mesmo sem split()isso, é possível se você quiser codificar os arrays Fieldse Replacementsno BEGINbloco.

Responder3

Para localizar e substituir em um campo, use este comando:

sed 's/whatyouwanttofind/whatyouwanttoreplace/field#'

ou seja, você ecoa isso:

$echo -e "1are,2are,3are,4are\n5are,6are,7are,8are"

1are,2are,3are,4are

5are,6are,7are,8are

e você quer fazer isso

$echo -e "1are,2are,3are,4are\n5are,6are,7are,8are" |  sed 's/are/arrr/2'

1are,2**arrr**,3are,4are

5are,6**arrr**,7are,8are

informação relacionada