bash如何读取两个文件的内容

时间:2011-12-07 22:42:21

标签: bash

我有这个脚本从两个文件中读取行并按以下顺序输出:

The first line of file1
the first line of file2
the second line of file1
the second line of file2
etc

如何在不使用脚本中的外部粘贴命令的情况下执行此操作?

paste -d'\n' file1 file2 | while read line1 && read line2;
do
#echo "$line1 $line2" 
echo "$line1" 
echo "$line2" 
done

4 个答案:

答案 0 :(得分:2)

使用文件描述符和read,例如see here

exec 5< file1
exec 6< file2

read line1 <&5
read line2 <&6

echo -n "$line1\n$line2"

答案 1 :(得分:1)

bash.sh

#!/bin/bash

exec 3< bash.sh
exec 4< data

while read l1 <&3 && read l2 <&4
do
    echo "$l1"
    echo "$l2"
done

data

1908 462
232 538
232 520
232 517

./bash.sh

#!/bin/bash
1908 462

232 538
exec 3< bash.sh
232 520
exec 4< data
232 517

如果您不希望在到达第一个文件的末尾时结束,请使用此

#!/bin/bash

exec 3< aaa
exec 4< bbb

while true
do
    end=1
    read l <&3
    if [ $? -eq 0 ];
    then
        echo "$l"
        end=0
    fi

    read l <&4
    if [ $? -eq 0 ];
    then
        echo "$l"
        end=0
    fi

    if [ $end -eq 1 ];
    then
        break
    fi

done

答案 2 :(得分:0)

while的外部,以及某些封闭脚本文件的外部是两个不同的东西。您可以完全自由地将粘贴移动到文件中,并仍然可以将其导入while内。

我不确定这是不是你要追求的。是吗?

答案 3 :(得分:0)

感谢那篇文章Kerrek ....更新了我的代码,现在工作正常:

exec 5< file1
exec 6< file2
while read line1 <&5 && read line2 <&6
do
echo  "$line1"
echo "$line2"
done