Adiciona caractere ao começo e fim da coluna

3

Eu tenho um arquivo como este:

78@54@this@15@23
65@22@is@92@16
34@12@an@14@18
13@42@example@52@22

E eu quero mudar isso para isso:

"78"@54@"this"@15@23
"65"@22@"is"@92@16
"34"@12@"an"@14@18
"13"@42@"example"@52@22

Eu tenho lutado com isso há muito tempo e não consigo entender como fazer isso. Qualquer ajuda é apreciada, obrigado.

    
por user17000 25.03.2012 / 01:57

5 respostas

5

Você pode tentar o awk:

echo "78@54@this@15@23
65@22@is@92@16
34@12@an@14@18
13@42@example@52@22" |
awk -F@ '{print "\""$1"\"@"$2"@\""$3"\"@"$4"@"$5}' 

"78"@54@"this"@15@23
"65"@22@"is"@92@16
"34"@12@"an"@14@18
"13"@42@"example"@52@22
    
por 25.03.2012 / 04:24
5

Um pouco mais detalhado, mas eu escrevi este awk:

awk -F@ -v OFS=@ '
    function quote(x) {return sprintf("\"%s\"", x)}
    {print quote($1), $2, quote($3), $4}
'
    
por 25.03.2012 / 05:01
1

Acho que uma solução awk provavelmente é melhor, mas você também pode usar sed :

sed -r 's/(\d+)@(\d+)@(\w+)(.*)/""@@""/' /path/to/your/file
    
por 25.03.2012 / 04:32
0

Isso é basicamente uma mistura das duas respostas anteriores do awk

'awk -F@ -vOFS=@ -vq='"' '{print q$1q, $2, q$3q, $4}'
    
por 25.03.2012 / 17:38
0

No awk: adicione aspas nos três primeiros campos e depois imprima a linha.

awk -F @ '{for (i = 1; i <= 3; i++) $i = "\"" $i "\""; print}'

-F @ define o separador de campo como @ . O loop adiciona cotações em torno dos três primeiros campos. O% finalprint (abreviação de print $0 ) imprime a linha com os campos modificados; $0 é recriado sempre que campos individuais ( $1 , $2 ,…) são alterados.

    
por 26.03.2012 / 00:58