shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] [Shell] - Ajuda


From: Tiago Peczenyj
Subject: Re: [shell-script] [Shell] - Ajuda
Date: Tue, 2 Aug 2016 14:13:08 +0200

vejamos

seu arquivo tem o formato
"alguma coisa" "outra coisa"

cada campo é separado por um espaço em branco. porem dentro de aspas duplas, o espaço em branco é "escapado", não sendo um separador de campos.

existem algumas formas de fazer isso. ja foram abordadas algumas ideias mas deixe eu dar um leve pitaco.

"2885" "2" "50" "ALO" "2" "3"
"2885" "2" "50" "ALO GENTE" "2" "3"

a partir dessa entrada vc pode verificar se existe algum caracter que não aparece em lugar algum com o bom e velho grep. Imagine que não existe @ então vc pode 

"2885"@"2"@"50"@"ALO"@"2"@"3"
"2885"@"2"@"50"@"ALO GENTE"@"2"@"3"

via sed fazendo

$ sed -i.old 's/" "/"@"/g' arquivo

isso vai gerar um arquivo.old com o conteudo original e o arquivo agora tera campos separados por... @

Agora vem a parte divertida

$ awk -F@ '{$5="\"3\""; print $0}' arquivo
"2885" "2" "50" "ALO" "3" "3"
"2885" "2" "50" "ALO GENTE" "3" "3"

é meio sujo ter que colocar o 3 dentro de aspas duplas, e aspas  duplas de novo. porém quando vc altera um campo de um registro ( como o $5 nesse exemplo) no awk e imprime o registro todo via $0 o print explode os campos de forma a usar o OFS ( output field separator ) que nesse caso é espaço em branco ( padrão ).

o que é o OFS? quando vc faz no awk '{ print $3, $4, $5 }' cada campo do print sera separado pelo conteudo dessa variavel. então se vc quer um formato especial como | vc pode simplesmente mudar o OFS

ainda tem duvidas? abre o terminal e brinca um pouco.

abraços

2016-07-29 15:33 GMT+02:00 Vinicius Xavier address@hidden [shell-script] <address@hidden>:
 

Bom dia pessoal,

Poderiam dar uma ajuda nesse caso?

Como alterar o valor 2 para 3 em determinada campo? Somente para esse campo, no caso abaixo o campo 5.

Entrada:
"2885" "2" "50" "ALO" "2" "3"
"2885" "2" "50" "ALO GENTE" "2" "3"

Saída
"2885" "2" "50" "ALO" "3" "3"
"2885" "2" "50" "ALO" "3" "3"

Att.,
Vinícius Xavier
 




--
Tiago B. Peczenyj

http://about.me/peczenyj

reply via email to

[Prev in Thread] Current Thread [Next in Thread]