Добавить символ в начало и конец столбца

Добавить символ в начало и конец столбца

У меня есть такой файл:

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

И я хочу изменить это на это:

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

Я долго над этим бьюсь и не могу понять, как это сделать. Любая помощь будет оценена по достоинству, спасибо.

решение1

Вы можете попробовать 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

решение2

Немного более многословно, но я бы написал так:

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

решение3

Я думаю, чторешение awkвозможно лучше, но вы также можете использовать sed:

sed -r 's/(\d+)@(\d+)@(\w+)(.*)/"\1"@\2@"\3"\4/' /path/to/your/file

решение4

В awk: добавьте кавычки вокруг первых трех полей, затем выведите строку.

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

-F @устанавливает разделитель полей на @. Цикл добавляет кавычки вокруг первых трех полей. Последний print(сокращение от print $0) печатает строку с измененными полями; $0перестраивается всякий раз, когда изменяются отдельные поля ( $1, , …).$2

Связанный контент