как получить кавычки на выходе в Unix? - PullRequest
0 голосов
/ 26 августа 2009

Файл abc.dat содержит строки

1
2
3

код

tradeline=""
for line in $(cat abc.dat)
do
tradeline="$line,$tradeline"
done

образец вывода получаю 1,2,3, но я хочу вывод как "1", "2", "3",

Можете ли вы помочь мне, плз

Ответы [ 3 ]

3 голосов
/ 26 августа 2009

У вашего кода есть ряд проблем, первая из которых - то, что вы описываете.

Он также поместит числа в обратном порядке и запятую в конце, что, вероятно, не то, что вам нужно.

Если это , что вы хотите, просто используйте второе решение.

Решение 1, правильный порядок и отсутствие запятой:

tradeline=""
sep=""
for line in $(cat abc.dat) ; do
    tradeline="${tradeline}${sep}\"${line}\""
    sep=","
done
echo ${tradeline}

Решение 2, правильный ордер с запятой:

tradeline=""
for line in $(cat abc.dat) ; do
    tradeline="${tradeline}\"${line}\","
done
echo ${tradeline}

Решение 3, намного проще, с использованием инструментов, предназначенных для работы:

awk 'BEGIN {sep=""} {printf "%s\"%s\"",sep,$0;sep=","} END {print}' abc.dat

Решение 3 будет моим предпочтительным вариантом, поскольку оно будет быстрее и сможет обрабатывать строки ввода с пробелами в них.

3 голосов
/ 26 августа 2009

Выйти из кавычек с помощью \:

tradeline="\"$line\",$tradeline"
1 голос
/ 26 августа 2009

Обратите внимание, что использование cat означает, что, если у вас есть несколько слов в одной строке, вы все равно будете заключать каждое слово в кавычки. Кроме того, ваш код будет генерировать «3,2,1», а не «1,2,3».

Чтобы получить кавычки вокруг каждой строки, вам нужно использовать команду read:

tradeline=""
sep=""
cat abc.dat |
while read line
do
    tradeline="$tradeline$sep\"$line\""
    sep=","
done

Это очень похоже на решение Пакса - за исключением использования read для получения каждой строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...