2017-07-28 210 views
1

我有兩個文本文件。第一個是這樣的:在linux中使用bash腳本合併兩個文本文件

a 
b 
c 

另一個文件是這樣的:

1 2 
3 4 

我要使用bash腳本在Linux中這兩個文件合併,這樣第一個文件的每一行會放在旁邊的第二個文件和輸出的所有行看起來是這樣的:

a 1 2  
a 3 4 
b 1 2 
b 3 4 
c 1 2 
c 3 4 

任何幫助,將不勝感激

+0

你嘗試過什麼等等遠嗎?這看起來像是可以輕鬆地用2個「同時讀取」循環或awk腳本完成的東西 – Aserre

回答

3

您可以使用awk這樣的:

awk 'NR==FNR{a[++n]=$0; next} {for (i in a) print $0, a[i]}' file2 file1 

a 1 2 
a 3 4 
b 1 2 
b 3 4 
c 1 2 
c 3 4 

參考:Effective AWK Programming

+1

非常感謝您的善意幫助 – user3891747

1

在純殼,你可以簡單地做:

#Usage: the_script FirstFile SecondFile 
while read -r l1; do 
    while read -r l2 ; do 
     echo "$l1 $l2" 
    done <"$2" 
done <"$1" 

但這些文件最好不要大,因爲shell讀取效率不高(它們爲每個字節創建一個系統調用)。

0

嘗試一個更多的awk,它將以與Input_file1相同的順序給出輸出。

awk 'FNR==NR{a[++i]=$0;next} {c[++k]=$0} END{for(q=1;q<=i;q++){for(u=1;u<=k;u++){print a[q],c[u]}}}' Input_file1 Input_file2 
0

我可能會被downvoted 無情,但我相信,這些類型的任務更適合PerlPython.
這裏有一個Python 2解決方案:

$ cat 1col.tmp 
a 
b 
c 

$ cat 2col.tmp 
1 2 
3 4 

$ cat merge.py 
with open("1col.tmp") as col1f: 
    for c1 in col1f.readlines(): 
     with open("2col.tmp") as col2f: 
      for c2 in col2f.readlines(): 
       print c1.strip(), c2.strip() 

$ python merge.py 
a 1 2 
a 3 4 
b 1 2 
b 3 4 
c 1 2 
c 3 4