bash - store_information二張table做join - 請用sql語法查出store_information table語法




使用awk如何合併2個文件,說A和B,並做一個左外部連接函數,並包括在這兩個文件中的所有列 (2)

join拯救:

$ join -t $',' -a 1 -e '' -o 0,1.2,1.3,1.4,2.2,2.3 file1.txt file2.txt

說明:

-t $',' :字段分隔符標記。

-a 1 :如果不存在於文件2中,則不要丟棄文件1中的記錄。

-e '' :缺少記錄將被視為空字段。

-o :輸出格式。

FILE1.TXT

1,a,b,c
2,a,b,c
3,a,b,c
5,a,b,c

FILE2.TXT

1,x,y
2,x,y
5,x,y
6,x,y
7,x,y

產量

1,a,b,c,x,y
2,a,b,c,x,y
3,a,b,c,,
5,a,b,c,x,y

我有不同數量的列的多個文件,我需要對第一個文件和第二個文件進行合併,並在awk中對第一個文件執行左外連接,並在兩個文件的第一列匹配的兩個文件中打印所有列。

我已經嘗試了下面的代碼來接近我的輸出。 但是我不能打印“,”,在第二個文件中沒有找到匹配的數字,下面是代碼,加入需要排序,比awk需要更多的時間,我的文件大小很大,就像3000萬條記錄。

awk -F ',' '{  
    if (NR==FNR){ r[$1]=$0}
    else{ if($1 in r) 
    r[$1]=r[$1]gensub($1,"",1)}
}END{for(i in r){print r[i]}}' file1 file2

文件1

number,column1,column2,..columnN

文件2

numbr,column1,column2,..columnN

產量

number,file1.column1,file1.column2,..file1.columnN,file2.column1,file2.column3...,file2.columnN

文件1

1,a,b,c
2,a,b,c
3,a,b,c
5,a,b,c

文件2

1,x,y
2,x,y
5,x,y
6,x,y
7,x,y

所需的輸出

1,a,b,c,x,y
2,a,b,c,x,y
3,a,b,c,,,
5,a,b,c,x,y

你可以試試,

awk 'BEGIN{FS=OFS=","}
   FNR==NR{d[$1]=substr($0,index($0,",")+1); next}
   {print $0, ($1 in d?d[$1]:",")}' file2 file1

你得到,

1,a,b,c,x,y
2,a,b,c,x,y
3,a,b,c,,
5,a,b,c,x,y






awk