Как читать 1 строку из 2 файлов последовательно?

Как читать 2 файла по 1 строке за раз? Скажем, если у меня есть file1 и file2 со следующим содержимым:

file1:

line1.a
line2.a
line3.a

file2:

line1.b
line2.b
line3.b

Как мне получить такой вывод -

line1.a
line1.b
line2.a
line2.b
line3.a
line3.b
... ...

Ответ 1

Вы можете сделать это либо с помощью чистого метода bash, либо с помощью инструмента под названием paste:

Ваши файлы:

[jaypal:~/Temp] cat file1
line1.a
line2.a
line3.a
line4.a

[jaypal:~/Temp] cat file2
line1.b
line2.b
line3.b
line4.b

Pure Bash Решение с использованием дескрипторов файлов:

< & 3 сообщает Bash прочитать файл в дескрипторе 3. Вы должны знать, что дескрипторы 0, 1 и 2 используются Stdin, Stdout и Stderr. Поэтому мы должны избегать их использования. Кроме того, дескрипторы после 9 используются Bash внутренне, поэтому вы можете использовать любое значение от 3 до 9.

[jaypal:~/Temp] while read -r a && read -r b <&3; do
> echo -e "$a\n$b";
> done < file1 3<file2
line1.a
line1.b
line2.a
line2.b
line3.a
line3.b
line4.a
line4.b

Утилита для вставки:

[jaypal:~/Temp] paste -d"\n" file1 file2
line1.a
line1.b
line2.a
line2.b
line3.a
line3.b
line4.a
line4.b

Ответ 2

Это может сработать для вас (GNU sed хотя):

sed 'R file2' file1

Ответ 3

С#:

string[] lines1 = File.ReadAllLines("file1.txt");
string[] lines2 = File.ReadAllLines("file2.txt");

int i1 = 0;
int i2 = 0;
bool flag = true;

while (i1+i2 < lines1.Length + lines2.Length)
{
    string line = null;
    if (flag && i1 < lines1.Length)
        line = lines1[i1++];
    else if (i2 < lines2.Length)
        line = lines2[i2++];
    else
        line = lines1[i1++];
    flag = !flag;

    Console.WriteLine(line);
}