On 12/28/2016 05:55 AM, Robert Nichols wrote:
On 12/28/2016 01:02 AM, Joachim Backes wrote:
> On 12/27/2016 11:49 PM, JD wrote:
>> Reading lines from 2 files in such a way that each iteration
>> lets me read the next line from each file so that the items
>> read from each file are in sync as far as line number is concerned.
>> Is this "doable"?
>>
>> For a single file, indexing to next line is automatic, visa vis
>> while read line; do
>> echo $line
>> done < some_file.txt
>>
>> for when more than 1 file is involved, it is not so easy ...
>
> JD,
>
> If using the bash, you could introduce file descriptors for each file
> you are reading from ( set the fie descriptor by using the exec
> command) and then read using the -u option for each file.
Indeed! I was just working on a script that has lines like:
exec 3< <(gunzip -fc "$Infile_1z" | tr '\0' '\n')
exec 4< "$Infile_2"
...
while [[ various_conditions ]]; do
read -r -u 3 Data1 || break
read -r -u 4 Data2 || { echo "EOF on $Infile_2"; exit 1; }
...
done
The reads stay in sync just fine.
Ala Jon LaBadie's example:
exec 5< .kshrc
exec 6< .profile while read -u 5 one && read -u 6 two
do
echo $one
echo $two
done