
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 para isso:
"78"@54@"this"@15@23
"65"@22@"is"@92@16
"34"@12@"an"@14@18
"13"@42@"example"@52@22
Estou lutando com isso há muito tempo e não consigo entender como fazer isso. Qualquer ajuda é apreciada, obrigado.
Responder1
Você poderia tentar 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
Responder2
Um pouco mais detalhado, mas eu escreveria isso:
awk -F@ -v OFS=@ '
function quote(x) {return sprintf("\"%s\"", x)}
{print quote($1), $2, quote($3), $4}
'
Responder3
Eu acho que umsolução erradaprovavelmente é melhor, mas você também pode usar sed
:
sed -r 's/(\d+)@(\d+)@(\w+)(.*)/"\1"@\2@"\3"\4/' /path/to/your/file
Responder4
No awk: adicione aspas nos três primeiros campos e imprima a linha.
awk -F @ '{for (i = 1; i <= 3; i++) $i = "\"" $i "\""; print}'
-F @
define o separador de campos como @
. O loop adiciona aspas nos três primeiros campos. O final print
(abreviação de print $0
) imprime a linha com os campos modificados; $0
é reconstruído sempre que campos individuais ( $1
, $2
,…) são alterados.