我有一个文本文件,
a1 a2 b1 b2 c1 c2 ...
我想通过两行join,所以可以sort
:
a1:a2 b1:b2 c1:c2 ...
我正在使用bash。 read
function将吃掉不受欢迎的领先空间。 我讨厌编写简单的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=":")