我想同時處理兩個文件中的文本。bash腳本 - 爲什麼不打開第一個文件?
fname3=XX1.txt fname2=XX2.txt
while read -r -u3 line1; read -r -u4 line2; do
echo "$line1:$line2";
done 3< "$fname3" 4< "$fname2"
輸出總是顯示「:(文本)」,我期望它輸出「(文本):(文本)」。 檔案很大,有關係嗎?
我想同時處理兩個文件中的文本。bash腳本 - 爲什麼不打開第一個文件?
fname3=XX1.txt fname2=XX2.txt
while read -r -u3 line1; read -r -u4 line2; do
echo "$line1:$line2";
done 3< "$fname3" 4< "$fname2"
輸出總是顯示「:(文本)」,我期望它輸出「(文本):(文本)」。 檔案很大,有關係嗎?
這適用於任何大小的文件。這裏有一個完整的,自包含的腳本,演示它的百萬行的文件:
#!/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
如果第一個文件比第二較短,最後剩下的行會直到第二個文件完全被讀取爲止。如果第二個文件較短,則腳本將在完成時停止並忽略第一個文件的其餘部分。
要停止當任何文件用盡行,請使用&&
而不是;
來分隔讀取語句。要閱讀,直到兩個文件不在同一行,請使用||
。
如果你想要做的是串聯相應的線,使用paste
:
paste -d : $fname3" "$fname2"
請在我的問題下閱讀我的意見。它不是連接我想要的,除此之外,我不能同時從兩個文件逐行閱讀。 – wagashi 2013-03-01 07:06:12
對我的作品... – 2013-02-27 21:23:34
我複製bash腳本到另一個文件。第一個文件有效,但第二個文件不起作用,複製腳本是否重要?這些文件真的很大...... – wagashi 2013-02-27 21:33:28
你在尋找'paste -d:XX1.txt XX2.txt'嗎? – tripleee 2013-02-27 21:36:05