bash脚本 - 为什么不打开第一个文件?

时间:2013-02-27 21:20:32

标签: bash file

我想同时处理两个文件中的文字。

fname3=XX1.txt fname2=XX2.txt


while read -r -u3 line1; read -r -u4 line2; do
    echo "$line1:$line2";
done 3< "$fname3" 4< "$fname2"

输出始终显示“:( text)”,我希望它输出“(text):( text)”。 文件很大,重要吗?

2 个答案:

答案 0 :(得分:3)

这适用于任何大小的文件发布。这是一个完整的,自包含的脚本,可以为百万行文件进行演示:

#!/bin/bash
printf "foo%s\n" {1..1000000} > XX1.txt
printf "bar%s\n" {1..1000000} > XX2.txt

fname3=XX1.txt fname2=XX2.txt

while read -r -u3 line1; read -r -u4 line2; do
    echo "$line1:$line2";
done 3< "$fname3" 4< "$fname2"

输出结果为:

foo1:bar1
foo2:bar2
...
foo999999:bar999999
foo1000000:bar1000000

如果第一个文件比第二个文件短,则最后剩余的行将为:line,直到完全读取第二个文件。如果第二个文件较短,脚本将在完成后停止,并忽略第一个文件的其余部分。

要在任何文件用完行时停止,请使用&&而不是;来分隔读取语句。要读取直到两个文件都不在行,请使用||

答案 1 :(得分:0)

如果您只想连接相应的行,请使用paste

paste -d : $fname3" "$fname2"