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

Удостоверьтесь, что присоединились к критическим спискам рассылки OpenBSD, которые будут сделаны знающий об обновлениях, и фиксирует.

http://www.openbsd.org/mail.html

3
26.03.2012, 01:44
5 ответов

Вы могли попробовать 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
5
27.01.2020, 21:09
  • 1
    Ahh, какое простое решение, спасибо. Почему я не думал об этом? :-) –  user17000 25.03.2012, 06:26
  • 2
    Только между прочим: Вам не нужна обратная косая черта продолжения строки '\' после канала | ... На самом деле у Вас могут быть пробел и/или комментарий после |. У Вас может даже быть несколько строк комментариев между | и команда. –  Peter.O 25.03.2012, 17:33

Немного более подробный, но я записал бы этот awk:

awk -F@ -v OFS=@ '
    function quote(x) {return sprintf("\"%s\"", x)}
    {print quote($1), $2, quote($3), $4}
'
5
27.01.2020, 21:09
  • 1
    По сравнению с другими решениями, Ваш уменьшает доступность человеческой ошибки и значительно более читаем. –  Jodie C 25.03.2012, 07:52

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

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

Это - в основном соединение двух предыдущих ответов awk

`awk -F@ -vOFS=@ -vq='"' '{print q$1q, $2, q$3q, $4}`
0
27.01.2020, 21:09

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

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

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

0
27.01.2020, 21:09

Теги

Похожие вопросы