2014-06-19 91 views
0

有許多帖子說明如何從bash中的多個文件讀取。在bash中的while循環中讀取多個文件,其中一個文件是多列的

paste提供了一種解決方案,也存在其他解決方案。

但是,我沒有找到以下內容。

如果一個有2列文本文件,可以讀取每列到一個變量,像這樣

while read COL1 COL2; do 
    echo $COL1 $COL2 
done < "$TARG_FILE" 

如果我想在同一迴路長度相同的兩個文件來讀,我怎麼能read第一個文件的兩列和另一個文件的第1列全都在一個循環中?

另一種解決方案可能是在讀取之前連接兩個文件,但原則上我想知道如何同時讀取兩個具有不同列數的文件。

+0

只需在循環內放置第二個'read'語句(您可能必須拆分文件描述符,即從&1讀取一個,從&3讀取一個)。或者更好的是,使用'awk' – BroSlow

回答

2

,如果你要單獨命名所有的領域你可以做這樣的事情:

while read f1_col1 f1_col2 f2_col1; do 
    : 
done < <(paste file file2) 

,或者你可以閱讀所有的字段到一個數組

while read -a all_columns; do 
    : 
done < <(paste file file2) 

,或者你可以閱讀領域相應的行分成不同的陣列

exec 3<file1 
exec 4<file2 
while read -u 3 -a file1_cols && read -u 4 -a file2_cols; do 
    : 
done 

或者,我敢肯定還有很多其他的可能性秒。

相關問題