Eu preciso adicionar vírgula no final das primeiras 3 palavras no arquivo de texto usando o shell script

0

Eu preciso adicionar vírgula no final das primeiras 3 palavras no arquivo de texto usando o shell script.

ex: arquivo.txt

jan Feb Mar  Chennai India
jan Feb Mar  Hyderabad India
jan Feb Mar  Bangalore India

A saída esperada é:

jan,Feb,Mar,  Chennai India
jan,Feb,Mar,  Hyderabad India
jan,Feb,Mar,  Bangalore India
    
por Kannan M 10.05.2018 / 07:47

4 respostas

0

Existem várias maneiras de fazer esse trabalho.

sed pode fazer o trabalho:

$ cat <your-file> | sed -r 's/(\w+)\s(\w+)\s(\w+)(.*)$/, , ,/'

read também pode fazer o trabalho:

$ while read c1 c2 c3 rest; do echo $c1, $c2, $c3, $rest; done < <your-file>

o awk também pode fazer o trabalho:

$ cat <your-file> | awk '{ printf "%s, %s, %s, ", $1, $2, $3; for (i = 4; i <= NF; i++) { printf "%s ", $i; } print ""}'
    
por 10.05.2018 / 08:30
1
$ awk -F'  ' '{ gsub(" ", ",", $1); $1 = $1 "," } 1' OFS='  ' file.txt
jan,Feb,Mar,  Chennai India
jan,Feb,Mar,  Hyderabad India
jan,Feb,Mar,  Bangalore India

Isso usa o fato de que a entrada pode ser interpretada como duas colunas delimitadas por espaços duplos. Ele substitui os espaços na primeira coluna por vírgulas e adiciona uma vírgula também.

    
por 10.05.2018 / 08:14
0

Tente também isto:

awk '{print $1","$2","$3", " substr($0, index($0,$4))}' file.txt

Saída:

jan,Feb,Mar, Chennai India
jan,Feb,Mar, Hyderabad India
jan,Feb,Mar, Bangalore India
    
por 10.05.2018 / 08:24
0

sed é uma maneira mais simples de fazer isso. sed oferece uma extensão que mudará a k-ésima ocorrência e depois disso.

Portanto, basta substituir todos os espaços por vírgula e substituir a vírgula pelo espaço após a quarta ocorrência.

exemplo:

 sed -i -e "s/ /,/g" -e 's/,/ /4g' file.txt

Saída:

jan,Feb,Mar, Chennai India
jan,Feb,Mar, Hyderabad India
jan,Feb,Mar, Bangalore India
    
por 10.05.2018 / 08:42