如何join每一个双线?

我有一个文本文件,

a1 a2 b1 b2 c1 c2 ... 

我想通过两行join,所以可以sort

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

我正在使用bashreadfunction将吃掉不受欢迎的领先空间。 我讨厌编写简单的C程序。

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

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

例如:

 % cat f a1 a2 b1 b2 % paste -s -d ':\n' f a1:a2 b1:b2 
 sed 'N;s/\n/:/;' < srcfile > destfile 

看看那里我发现了一个可以转换成的例子:

 sed '$!N;s/\n/:/' < file 
 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 
 awk '{line=$0; printf line; if (getline) printf ":" $0; print ""}' inputfile 

通过备份进行就地编辑:

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

编辑就地无备份:

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

这是在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=":")