0

我想同时对两个文件中的文本做一些事情。

fname3=XX1.txt fname2=XX2.txt


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

输出总是显示“:(文本)”,我希望它输出“(文本):(文本)”。文件很大,有关系吗?

4

2 回答 2

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一直持续到第二个文件被完全读取。如果第二个文件较短,脚本将在完成后停止并忽略第一个文件的其余部分。

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

于 2013-02-27T21:36:01.417 回答
0

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

paste -d : $fname3" "$fname2"
于 2013-02-27T23:16:48.930 回答