Procura e substitui a enésima coluna usando awk [duplicado]

1

Como podemos pesquisar e substituir "xyz" apenas em col3?

col1,col2,col3,col4  
abc,def,xyz,xyz  
xyz,abc,def,xyz
    
por Viplav Singh 09.07.2018 / 05:55

3 respostas

3

Tente isto:

awk -F , '{ if ($3 == "xyz") $3="abc";}1' OFS=, test.csv
    
por 09.07.2018 / 06:40
0

Você não mencionou com o que deseja substituí-lo, por isso vou usar ghi como um marcador:

Se esse é o texto real, a maneira mais fácil é com sed . Você pode fazer isso com awk , mas isso só enviará a modificação para a saída padrão, enquanto sed pode alterar o arquivo em si, que é explicado abaixo:

sed '2s|xyz|ghi|1' file

Para explicar:

2s replaces instances on the second line
xyz is what you want to replace
ghi is what it's being replaced with
1 replaces the first instance of it on the specified line

A saída:

col1,col2,col3,col4
abc,def,ghi,xyz
xyz,abc,def,xyz

Quando tiver certeza de que faz o que deseja, use a opção -i para alterar o arquivo em si, em vez de enviá-lo para a saída padrão:

sed -i '2s|xyz|ghi|1' file

Se houver outras linhas e colunas nas quais você queira substituí-lo, será necessário modificar 2s e 1 para especificar o (s) local (is) e a (s) instância (s). Obviamente, você também substituiria ghi pelo substituto que quiser.

Se houver outras linhas na coluna 3 em que você precise substituir xyz , poderá usar a opção e . Por exemplo:

col1,col2,col3,col4
abc,def,xyz,xyz
xyz,abc,def,xyz
abc,def,xyz,abc

xyz aparece na quarta linha da coluna 3 também.

sed -e '2s|xyz|ghi|1' -e '4s|xyz|ghi|1' file

sed -i -e '2s|xyz|ghi|1' -e '4s|xyz|ghi|1' file

Isso substituiria a primeira instância na quarta linha, além de usar -e para especificar cada fluxo de substituições. A opção -i altera o arquivo em vez de apenas enviá-lo para a entrada padrão.

    
por 09.07.2018 / 06:32
0
awk -F ',' -v needle='xyz' -v replacement='foobar' 'BEGIN{ OFS = FS; } (NR > 1 && $3 == needle) { $3 = replacement; } 1' input.txt

Defina needle e replacement conforme necessário. NR > 1 garante que nenhuma substituição ocorra na primeira linha (aparentemente contendo os cabeçalhos da coluna).

    
por 09.07.2018 / 11:16