
Я хотел бы заменить «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