AWK não está imprimindo o resultado

-2

Eu quero escrever um simples comando awk no Ubuntu (versão 14.04), mas ele não está retornando nada.

$ cat sample.csv
001,Text1,Val1
002,Text2,Val2
003,Text3,Val3

$ cat sample.csv|awk -F',''{for (i=0;i<2,i++){gsub(/Text[0-9]/,"Text"+i); print $0}}'

não retorna nada. O resultado esperado deve ser:

001,Text1,Val1
001,Text2,Val1
002,Text2,Val2
002,Text3,Val2
003,Text3,Val3
003,Text4,Val3

Ele está funcionando perfeitamente em outra máquina onde o Red Hat Linux está lá. Tenho que instalar alguma coisa para que funcione? O shell é bash.

$ which awk
/usr/bin/awk
    
por Koushik Chandra 20.02.2015 / 08:57

3 respostas

1

Seu problema não tem nada a ver com gawk como você escreveu em sua resposta. O script awk da sua pergunta está simplesmente errado e não funciona:

Compare seu

cat sample.csv|awk -F',''{for (i=0;i<2,i++){gsub(/Text[0-9]/,"Text"+i); print $0}}'

e uma versão de trabalho

cat sample.csv|awk -F',' '{for (i=0;i<2;i++){gsub(/Text[0-9]/,"Text"$1+i); print $0}}'

E eu usaria isso

awk -F, '{for (i=0;i<2;i++){gsub(/Text[0-9]/,"Text"$1+i); print $0}}' sample.csv

Saída

001,Text1,Val1
001,Text2,Val1
002,Text2,Val2
002,Text3,Val2
003,Text3,Val3
003,Text4,Val3
    
por A.B. 23.08.2015 / 17:05
0

Não sei bem o que você está tentando fazer, mas talvez você precise de um script como o abaixo.

awk -F, 'BEGIN{OFS=FS}
{
    match($2,/[0-9]+$/)
    n=substr($2,RSTART,RLENGTH)
    for (i=0;i<2;i++){
        gsub(/[0-9]+$/,n+i,$2)
        print
    }
}' sample.csv
    
por geram 20.02.2015 / 10:46
-1

O comando (no corpo da questão houve um pequeno problema no comando, que eu corrijo abaixo) funciona bem depois de instalar o gawk

cat sample.csv|awk -F, '{for (i=0;i<2;i++){gsub(/Text[0-9]/,"Text"$1+i); print $0}}'

Executou sudo apt-get install gawk para instalar gawk .

    
por Koushik Chandra 20.02.2015 / 09:31