我有一个文本文件以以下格式:
cat yourfile.txt
a
b
c
d
e
f
g
我想将其转换为:
a,b,c,d,e,f,g
这是我现在提出的解决方案:
while read line; do printf "%s%s" $line "," ; done < yourfile.txt
a,b,c,d,e,f,g,
两个问题:
- 我在最后获得额外的逗号(,)
- 我知道我可以在shell脚本中运行此命令,并从build.xml中执行Shell脚本。还是有更优雅的解决方案?
您可以使用sed
:
$ sed ':a;N;$!ba;s/n/,/g' test.txt
a,b,c,d,e,f,g
请参阅此答案以阅读更多详细信息。
否则,对于其他解决方案,删除最终逗号非常容易。例如使用sed
:
$ cat test.txt|tr "n" ","|sed "s/,$//g"
a,b,c,d,e,f,g
$ while read line; do printf "%s%s" $line "," ; done < test.txt|sed "s/,$//g" # with your solution
a,b,c,d,e,f,g
a"一个" - 利用IFS
变量和数组:
str=$( IFS=$'n'; arr=( $(<test.txt) ); IFS=,; echo "${arr[*]}" )
首先,将整个文件读取为一个数组,使用线馈送为字段分离器确保每个元素一行。接下来,更改了场分隔符到逗号,以便将整个数组连接到一个逗号划分的字符串中。
只需使用tr
命令
> string=$(tr $'n' ',' < "yourfile.txt"); echo "${string%,*}"
a,b,c,d,e,f,g
用bash替换来删除尾随逗号。