我想同时处理两个文件中的文字。
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)”。 文件很大,重要吗?
答案 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"