如果你不介意一點點shell腳本,如果你可以在你這裏顯示...這裏的形式輸入的轉儲是我的樣品輸入:
100: London Manchester 366
121: London CityA 240
144: Manchester CityA 300
150: CityA CityB 90
233: Manchester London 366
你可能可以做這樣的事情:
$ cat m.txt | awk '{ if ($2 < $3) print $2, $3, $1; else print $3, $2, $1}' | sort
CityA CityB 150:
CityA London 121:
CityA Manchester 144:
London Manchester 100:
London Manchester 233:
所以你至少有雙組合在一起。不知道從那裏將是最好的舉措。
好,這是一個命令行的野獸:
$ cat m.txt | awk '{ if ($2 < $3) print $2, $3, $1; else print $3, $2, $1}' | (sort; echo "") | awk '{ if (fst == $1 && snd == $2) { printf "%s%s", num, $3 } else { print fst, snd; fst = $1; snd = $2; num = $3} }' | grep "^[0-9]"
150:151:150:255:CityA CityB
100:233:London Manchester
其中m.txt有這些新的內容:
100: London Manchester 366
121: London CityA 240
144: Manchester CityA 300
150: CityA CityB 90
151: CityB CityA 90
233: Manchester London 366
255: CityA CityB 90
Perl的可能會比AWK一個更好的選擇,但在這裏不用:首先,我們對兩個城市名稱進行排序,並將ID放在字符串的末尾,這是我在第一節中完成的。然後我們將這些對分組在一起,並且我們必須在awk腳本的最後一行添加完成。然後,我們遍歷文件中的每一行。如果我們看到一對新的城市,我們打印先前看到的城市,並存儲新城市和新ID。如果我們看到上次看到的同一城市,則會打印出上一行的ID和此行的ID。最後,我們只grep僅以行號開頭的行,以便丟棄非重複對。
如果一個對出現兩次以上,你會得到一個重複的ID,但這不是什麼大不了的事。
清除泥?
我想你可能還需要在你的連接語句中使用「AND t1.carrier = t2.carrier」。我懷疑,如果兩個方向都是由同一個承運人提供的話,那隻會是一次重複的旅程。希望OP能澄清匹配規則。 – Convict 2009-07-03 01:03:40