大家好,小弟有一個問題想請教各位先進
有兩個檔案 a.txt b.txt
其內容如下
a.txt
111|1234|100.0
111|1235|6000.0
222|3334|111.0
333|34435|546.0
666|234|99.0
b.txt
111|1234|100.0
111|1235|6000.0
333|34435|546.0
777|4555|700.0
他們前兩欄為primary key
我目標是想比對兩個檔案把兩個檔案merge成一個檔案
左邊為a.txt 右邊為b.txt
如果只有一邊有 , 另一邊就填 ||
預期結果為:
111|1234|100.0|111|1234|100.0
111|1235|6000.0|111|1235|6000.0
222|3334|111.0|||
333|34435|546.0|333|34435|546.0
666|234|99.0
|||777|4555|700.0
小弟是先用cut + sort指令
去找出a.txt 和 b.txt的前兩欄值 output到一個檔案 pkid.txt
再用/bin/sh 程式執行,如下
#!/bin/sh
while read line
do
pkid=$(echo $line | cut -d \| -f 1,2)
var1=$(grep $pkid a.txt)
if [ $? -ne 0 ]
then
var1="||"
fi
var2=$(grep $pkid b.txt)
if [ $? -ne 0 ]
then
var2="||"
fi
echo "$var1|$var2" >> output.txt
done < pkid.txt
想請問有比較好的辦法解決這類的問題嗎?
謝謝!