如何在unix的输出中获取引号?

时间:2009-08-26 05:06:25

标签: linux unix

abc.dat文件包含行

1
2
3

代码是

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

示例输出结果是1,2,3, 但我希望输出为“1”,“2”,“3”,

你可以帮我PLZ

3 个答案:

答案 0 :(得分:3)

使用\转义引号:

tradeline="\"$line\",$tradeline"

答案 1 :(得分:3)

您的代码存在许多问题,首先是您所描述的问题。

它也会以相反的顺序放置数字,并且有一个逗号,这可能不是你想要的。

如果你想要的,只需使用第二个解决方案。

解决方案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将是我的首选选项,因为它会更快并且能够处理其中带有空格的输入行。

答案 2 :(得分:1)

请注意,使用此类cat意味着如果您在一行中有多个单词,您仍会分别引用每个单词。此外,您的代码将生成'3,2,1'而不是'1,2,3'。

要获得每行的引号,您需要使用read命令:

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

这与Pax的解决方案非常相似 - 除了使用read获取每一行。