Как соединить каждую двойную линию? - PullRequest
3 голосов
/ 15 ноября 2010

У меня есть текстовый файл,

a1
a2
b1
b2
c1
c2
...

Я хочу объединить две строки, чтобы можно было sort it:

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

Я использую Bash. функция read скушает начальный пробел, что нежелательно. И я ненавижу писать простые глупые программы на Си.

Затем я могу использовать tr : "\n", чтобы разделить объединенный файл на два файла.

Ответы [ 7 ]

12 голосов
/ 15 ноября 2010

paste -s -d ':\n' file должен сделать это.

Например:

% cat f
a1
a2
b1
b2
% paste -s -d ':\n' f
a1:a2
b1:b2
3 голосов
/ 15 ноября 2010
sed 'N;s/\n/:/;' < srcfile > destfile
0 голосов
/ 15 июня 2014

Вот решение на 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=":")
0 голосов
/ 15 ноября 2010

редактирование на месте с резервной копией:

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

редактирование на месте без резервной копии:

perl -i -pe 's/\n\Z/:/ if $.%2' file
0 голосов
/ 15 ноября 2010
awk '{line=$0; printf line; if (getline) printf ":" $0; print ""}' inputfile
0 голосов
/ 15 ноября 2010
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
0 голосов
/ 15 ноября 2010

Глядя там Я нашел пример, который можно преобразовать в:

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