Как читать 1 строку из 2 файлов последовательно? - PullRequest
12 голосов
/ 18 декабря 2011

Как прочитать 2 файла по одной строке за раз? Скажите, если у меня есть 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   
...
...

Ответы [ 3 ]

29 голосов
/ 18 декабря 2011

Вы можете сделать это либо чистым 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

PureBash Solution с использованием файловых дескрипторов:

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

[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
3 голосов
/ 18 декабря 2011

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

sed 'R file2' file1
0 голосов
/ 18 декабря 2011

C #:

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...