我试图弄清楚如何设置两个定界符:一个是换行符,另一个是空格,所以当我从这样填充的文件中读取数字时
1 2 3
4
5
6
我像1,2,3,4,5,6
这样得到一个数字。我正在使用读取命令来读取数字。谢谢!
答案 0 :(得分:1)
您的问题尚不清楚,但是基于示例和预期的输出,简单的解决方案是使用tr
:
$ cat file | tr '[ \n]' ,
1,2,3,4,5,,6,
但是在5
之后有一个空格,因此您需要使用-s
来压缩重复序列:
$ cat file | tr -s '[ \n]' ,
1,2,3,4,5,6,
仍然留下令人讨厌的结尾逗号和结尾缺少换行符。可以使用sed
或awk
处理。 (具有蓝宝石和钢铁叙述者的声音) Awk已分配:
$ cat file | tr -s '[ \n]' , | awk 'sub(/,$/,"")' # fails if output is just 0
1,2,3,4,5,6 # add ||1 or ||$0!="" to fix
等等。自从我们开始awk
以来,为什么还要为tr
烦恼:
$ awk '{
gsub(/ +/,",",p) # replace space runs with a single comma
printf "%s",p
p=(p~/,$/||NR==1?"":",") $0 # 5 followed by space leaves a comma in the end so...
}
END {
print p
}' file
1,2,3,4,5,6
结果看起来很复杂,我刚才注意到您确实提到了使用read
命令,所以也许我的解决方案还很遥远,我应该从一开始就使用bash脚本:
s="" # using this neat trick I just learned here ;D
while read line # read a full line
do
for word in $line # read word by word
do
echo -n $s$word # output separator and the word
s=, # now set the separator
done
done < file
echo # newline to follow
1,2,3,4,5,6
是的,这是星期六晚上,我没有生命。