Подтвердить что ты не робот

Как чередовать строки из двух текстовых файлов

Какой самый простой/быстрый способ чередования строк из двух (или более) текстовых файлов? Пример:

Файл 1:

line1.1
line1.2
line1.3

Файл 2:

line2.1
line2.2
line2.3

Interleaved:

line1.1
line2.1
line1.2
line2.2
line1.3
line2.3

Уверен, что легко написать небольшой Perl script, который открывает их обе и выполняет задачу. Но мне было интересно, возможно ли уйти с меньшим количеством кода, возможно, с одним слоем с использованием инструментов Unix?

4b9b3361

Ответ 1

paste -d '\n' file1 file2

Ответ 2

Здесь решение с использованием awk:

awk '{print; if(getline < "file2") print}' file1

производит этот вывод:

line 1 from file1
line 1 from file2
line 2 from file1
line 2 from file2
...etc

Использование awk может быть полезно, если вы хотите добавить к выходу дополнительное форматирование, например, если вы хотите пометить каждую строку на основе того, из какого файла она поступает:

awk '{print "1: "$0; if(getline < "file2") print "2: "$0}' file1

производит этот вывод:

1: line 1 from file1
2: line 1 from file2
1: line 2 from file1
2: line 2 from file2
...etc

Примечание: этот код предполагает, что файл1 имеет длину больше или равную файлу2.

Если файл1 содержит больше строк, чем file2, и вы хотите выводить пустые строки для файла2 после его завершения, добавьте предложение else в тест getline:

awk '{print; if(getline < "file2") print; else print ""}' file1

или

awk '{print "1: "$0; if(getline < "file2") print "2: "$0; else print"2: "}' file1

Ответ 3

Здесь можно сделать GUI: вставьте их в два столбца в электронную таблицу, скопируйте все ячейки, затем используйте регулярные выражения, чтобы заменить вкладки на новые строки.

Ответ 4

@Послушайте ответ в полезном направлении. Вы можете добавлять номера строк, сортировать и разделять номера строк:

(cat -n file1 ; cat -n file2 )  | sort -n  | cut -f2-

Примечание (меня интересует) для этого требуется немного больше работы, чтобы получить право на заказ, если вместо статических файлов вы используете вывод команд, которые могут работать медленнее или быстрее друг друга. В этом случае вам необходимо добавить/отсортировать/удалить другой тег в дополнение к номерам строк:

(cat -n <(command1...) | sed 's/^/1\t/' ; cat -n <(command2...) | sed 's/^/2\t/' ; cat -n <(command3) | sed 's/^/3\t/' )  \
   | sort -n  | cut -f2- | sort -n | cut -f2-

Ответ 5

cat file1 file2 |sort -t. -k 2.1

Здесь указано, что разделитель "." и что мы сортируем по первому символу второго поля.