Как объединить два столбца от отдельных текстовых файлов?

text1:

    ankr 
    ankr
    ankr
    brmu
    brmu

text2:

    jplg1730.17i
    jplg1750.17i
    jplg1770.17i

Я должен создать этот текстовый файл:

merged_file:
    ankr_jplg1730.17i
    ankr_jplg1750.17i
    ankr_jplg1770.17i
    brmu_jplg1730.17i
    brmu_jplg1750.17i

Как я могу объединить этот текстовый файл с кодами?

1
задан 26 July 2019 в 20:02

2 ответа

awk:

awk 'NR==FNR {a[NR]=$0; next} {if (a[i]) {print $0"_"a[i]; ++i} \
                               else {print $0"_"a[1]; i=2}}' text2 text1
  • NR==FNR {a[NR]=$0; next} сохраняет записи от text2 как оценивает ассоциативному массиву a, причем соответствующие рекордные числа являются ключами

  • {if (a[i]) {print $0"_"a[i]; ++i} else {print $0"_"a[1]; i=2}} печатает записи от text1 в нужном формате, отслеживании повторения индекса массива с переменной i

Пример:

% cat text1
ankr
ankr
ankr
brmu
brmu

% cat text2
jplg1730.17i
jplg1750.17i
jplg1770.17i

% awk 'NR==FNR {a[NR]=$0; next} {if (a[i]) {print $0"_"a[i]; ++i} else {print $0"_"a[1]; i=2}}' text2 text1
ankr_jplg1730.17i
ankr_jplg1750.17i
ankr_jplg1770.17i
brmu_jplg1730.17i
brmu_jplg1750.17i
2
ответ дан 7 December 2019 в 12:32

С Python:

$ python3 -c 'import sys, itertools as i; [print(a.strip(), b.strip(), sep="_") for a,b in zip(open(sys.argv[1]), i.cycle(open(sys.argv[2])))]' text1 text2
ankr_jplg1730.17i
ankr_jplg1750.17i
ankr_jplg1770.17i
brmu_jplg1730.17i
brmu_jplg1750.17i

Более четко:

#! /usr/bin/env python3
import sys
from itertools import cycle
with open(sys.argv[1]) as file1, open(sys.argv[2]) as file2:
    for l1, l2 in zip(file1, cycle(file2)):
        print(l1.strip(), l2.strip(), sep="_")

cycle(file2) циклически повторяет содержание file2, так, чтобы после того, как последняя строка была считана, она начинает с первой строки. zip проводит строку из каждого файла вместе.

1
ответ дан 7 December 2019 в 12:32

Другие вопросы по тегам:

Похожие вопросы: