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

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

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

1
задан 14 September 2017 в 14:53

6 ответов

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
ответ дан 22 May 2018 в 18:28

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
ответ дан 18 July 2018 в 06:52

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
ответ дан 24 July 2018 в 18:41

С 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
ответ дан 22 May 2018 в 18:28

С 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
ответ дан 18 July 2018 в 06:52

С 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
ответ дан 24 July 2018 в 18:41

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

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