File1:
.tid.setnr := 1123
.tid.setnr := 3345
.tid.setnr := 5431
.tid.setnr := 89323
File2:
.tid.info := 12
.tid.info := 3
.tid.info := 44
.tid.info := 60
Выходной файл:
.tid.info := 12
.tid.setnr := 1123
.tid.info := 3
.tid.setnr := 3345
.tid.info := 44
.tid.setnr := 5431
.tid.info := 60
.tid.setnr := 89323
text-processing
awk
sed
paste
pmaipmui
источник
источник
Ответы:
Использование
paste
:источник
Другое решение awk:
источник
paste
Решение является самым портативным и самым эффективным. Я упоминаю эту альтернативу только в том случае, если вы предпочитаете ее поведение в случае, когда два файла не имеют одинаковое количество строк:С GNU
sed
:Если
file1
имеет меньше строк, чемfile2
, то, когдаfile1
исчерпан,sed
ничего не будет выводить для него (в отличие от пустых строк дляpaste
).Если
file1
имеет больше строк, чемfile2
, то эти дополнительные строки будут отброшены (в отличие от печати пустых строк дляfile2
с помощьюpaste
).источник
Используя
awk
(gawk
,nawk
,mawk
):NR==FNR {x[FNR]=$0;next}
:NR==FNR
сопоставляется, только если текущий номер записи равен текущему номеру записи файла (следовательно, он сопоставляется только при обработке первого файла): сохраняетx
текущую обработанную запись в массиве с индексом, равным номеру текущей записи файла, и пропускает текущая запись{print x[FNR]"\n"$0}
: печатает содержимое массиваx
с индексом, равным номеру текущей записи файла, за которым следует новая строка и содержимое текущей записиисточник
file1
иfile2
в команде.mawk
также, и это бежит на этом также. В любом случае, будучи разумным, я не понимаю, почему это не должно работать только наоборот (то есть просто путем переключения файлов). Это не то, чтоawk
заботится о вводе, строки - это строки. Если бы что-то не было поддержано его версией, это просто сломалось бы в первый раз. Проще говоря, просто OP сделал ошибку, переключив входные файлы в аргументах.Самое простое решение приведено ниже.
или
источник
file1
затем одна строка изfile2
и так далее ...)