abc.dat文件包含行
1
2
3
代码是
tradeline=""
for line in $(cat abc.dat)
do
tradeline="$line,$tradeline"
done
示例输出结果是1,2,3, 但我希望输出为“1”,“2”,“3”,
你可以帮我PLZ答案 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
获取每一行。