Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Bash中添加多个分隔符_Bash_Shell - Fatal编程技术网

如何在Bash中添加多个分隔符

如何在Bash中添加多个分隔符,bash,shell,Bash,Shell,我试图找出如何设置两个分隔符:一个是换行符,另一个是空格,所以当我从这样填充的文件中读取数字时 1 2 3 4 5 6 我按顺序得到一个数字,如1,2,3,4,5,6。我正在使用read命令读取数字。谢谢 您的问题非常不清楚,但基于示例和预期输出,简单的解决方案是使用tr: $ cat file | tr '[ \n]' , 1,2,3,4,5,,6, 但是5后面有一个空格,因此需要使用-s压缩重复: 这仍然会给你留下一个令人讨厌的逗号和结尾处的换行符。可以使用sed或awk处理。(用蓝宝

我试图找出如何设置两个分隔符:一个是换行符,另一个是空格,所以当我从这样填充的文件中读取数字时

1 2 3
4
5 
6

我按顺序得到一个数字,如
1,2,3,4,5,6
。我正在使用read命令读取数字。谢谢

您的问题非常不清楚,但基于示例和预期输出,简单的解决方案是使用
tr

$ cat file | tr '[ \n]' ,
1,2,3,4,5,,6,
但是
5
后面有一个空格,因此需要使用
-s
压缩重复:

这仍然会给你留下一个令人讨厌的逗号和结尾处的换行符。可以使用
sed
awk
处理。(用蓝宝石和钢铁叙述者的声音)Awk已被分配:

等等。既然我们开始了
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
s=”“#使用我刚刚学到的这个巧妙的技巧;D
读一行时#读一整行
做
对于$line中的单词#逐字阅读
做
echo-n$s$word#输出分隔符和单词
s=,#现在设置分隔符
完成
完成<文件
echo#要跟随的新行
1,2,3,4,5,6

是的,现在是星期六晚上,我没有生活。

你能检查一下吗,如果它有效的话:
echo$(cat file_name)|而IFS=read-r var;不要重复$var;完成
。谢谢你,给你。
$ 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
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