我有一个文本文件,
a1
a2
b1
b2
c1
c2
...
我想加入两行,这样就可以sort
:
a1:a2
b1:b2
c1:c2
...
我正在使用bash。 read
函数会占用前导空格,这是不受欢迎的。我讨厌编写简单的愚蠢的C程序。
然后,我可以使用tr : "\n"
将连接的文件拆分回两个文件。
答案 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=":")