如何加入每一条双线?

时间:2010-11-15 08:34:42

标签: linux bash sed text-processing

我有一个文本文件,

a1
a2
b1
b2
c1
c2
...

我想加入两行,这样就可以sort

a1:a2
b1:b2
c1:c2
...

我正在使用bash。 read函数会占用前导空格,这是不受欢迎的。我讨厌编写简单的愚蠢的C程序。

然后,我可以使用tr : "\n"将连接的文件拆分回两个文件。

7 个答案:

答案 0 :(得分:12)

paste -s -d ':\n' file应该这样做。

例如:

% cat f
a1
a2
b1
b2
% paste -s -d ':\n' f
a1:a2
b1:b2

答案 1 :(得分:3)

sed 'N;s/\n/:/;' < srcfile > destfile

答案 2 :(得分:0)

over there我找到了一个可以转换成的例子:

sed '$!N;s/\n/:/' < file

答案 3 :(得分:0)

INDEX=0
A=""
B=""

for i in `awk '{print $1}' input`
    do
    if [ $INDEX -eq 0 ]; then
        A=$i;
        let INDEX=1;
    fi

    if [ $INDEX -eq 1 ]; then
        B=$i;
        echo $A:$B
        let INDEX=0;
    fi
done

答案 4 :(得分:0)

awk '{line=$0; printf line; if (getline) printf ":" $0; print ""}' inputfile

答案 5 :(得分:0)

使用备份进行就地编辑:

perl -i.bak -pe 's/\n\Z/:/ if $.%2' file

就地编辑没有备份:

perl -i -pe 's/\n\Z/:/ if $.%2' file

答案 6 :(得分:0)

这是python中的解决方案:

#!/usr/bin/python3

def njoin(filename, outfn="", n=3, linesuffix=" "):
    if not outfn:
        outfn = filename + ".join"
    with open(filename) as infh, open(outfn, "w") as outfh:
        nline = 0
        for line in infh:
            if nline % n != n-1:
                line = line.rstrip() + linesuffix
            outfh.write(line)
            nline += 1

在你的情况下,你可以使用这样的功能:

njoin("/path/to/file", n=2, linesuffixe=":")