10

我在 bash 中有一个函数,可以将一堆行输出到标准输出。我想将它们组合成一行,它们之间有一些分隔符。

前:

one 
two 
three 

后:

one:two:three   

有什么简单的方法可以做到这一点?

4

6 回答 6

15

采用paste

$ echo -e 'one\ntwo\nthree' | paste -s -d':'
one:two:three
于 2012-04-24T18:22:11.357 回答
7

另一种方式:

cat file | tr -s "\n" ":"
于 2012-04-26T19:27:47.133 回答
4

这可能对您有用:

paste -sd':' file
于 2012-04-24T18:21:18.220 回答
1

逐字记录@glennJackman 的更正

awk '{printf("%s%s", sep, $0); sep=":"} END {print ""}' file

或者如您指定的 bash

while read line ; do printf "%s:" $line ; done < file | sed s'/:$//'

我希望这有帮助

于 2012-04-24T18:18:47.177 回答
1

为了好玩,这是一种仅限 bash 的方式:

echo $'one\n2 and 3\nfour' | { mapfile -t lines; IFS=:; echo "${lines[*]}"; }

输出

one:2 and 3:four

分组{}是为了确保所有引用数组变量的命令都在同一个子shell中执行。一旦管道结束,该变量将不存在。

http://www.gnu.org/software/bash/manual/bashref.html#index-mapfile-140

于 2012-04-24T18:52:19.027 回答
0

输入.txt

one
two
three

Perl 解决方案:dummy.pl

 @a = `cat /home/Input.txt`;
    foreach my $x (@a)
    {
            chomp($x);
            push(@array,"$x");
    }
    chomp(@array);
    print "@array";

将脚本运行为:

$> perl 虚拟.pl | sed 's/ /:/g' > 输出.txt

输出.txt

一二三

于 2012-04-25T05:28:58.583 回答