代码之家  ›  专栏  ›  技术社区  ›  Lenik

如何连接每条双线?

  •  3
  • Lenik  · 技术社区  · 14 年前

    我有一个文本文件,

    a1
    a2
    b1
    b2
    c1
    c2
    ...
    

    我想排两行,这样一个人就可以 sort 它:

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

    我在用bash。这个 read 函数会吃掉前导空间,这是不希望的。我不喜欢写简单愚蠢的C程序。

    那么,我可以用 tr : "\n" 将合并的文件拆分回两个文件。

    7 回复  |  直到 14 年前
        1
  •  12
  •   Nicholas Riley    14 年前

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

    例如:

    % cat f
    a1
    a2
    b1
    b2
    % paste -s -d ':\n' f
    a1:a2
    b1:b2
    
        2
  •  3
  •   Didier Trosset    14 年前
    sed 'N;s/\n/:/;' < srcfile > destfile
    
        3
  •  0
  •   Diego Sevilla    14 年前

    over there 我发现了一个可以转换为:

    sed '$!N;s/\n/:/' < file
    
        4
  •  0
  •   Nico Huysamen    14 年前
    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
    
        5
  •  0
  •   Dennis Williamson    14 年前
    awk '{line=$0; printf line; if (getline) printf ":" $0; print ""}' inputfile
    
        6
  •  0
  •   sid_com    14 年前

    使用备份就地编辑:

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

    就地编辑无备份:

    perl -i -pe 's/\n\Z/:/ if $.%2' file
    
        7
  •  0
  •   qed    10 年前

    以下是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=":")