Замена одной тестовой строки на другую в определенном столбце

Замена одной тестовой строки на другую в определенном столбце

Я хотел бы заменить «CC» на «C» и «AA» на «A» в определенном столбце файла с разделителями табуляции (используя, awkвероятно,).

решение1

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

Замените $1на столбец, который вы хотите изменить.

решение2

Если у вас нет доступа к gsub(), но есть доступ к split(), вы можете просто создать эквивалент следующим образом:

Учитывая вводные данные

AA      AA      CC      CC      AA      CC

следующий awkсценарий

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;
}

даст желаемые результаты для полей 1, 3 и 5:

A       AA      C       CC      A       CC

Даже без split()этого можно, если вы хотите, жестко закодировать массивы Fieldsи Replacementsв BEGINблоке.

решение3

Для поиска и замены в одном поле используйте эту команду:

sed 's/whatyouwanttofind/whatyouwanttoreplace/field#'

т.е. вы повторяете это:

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

1are,2are,3are,4are

5are,6are,7are,8are

и вы хотите это сделать

$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

Связанный контент