Имейте набор данных, в котором максимальное количество записей в одном файле составляет ~ 130 000.
Вот подмножество первого файла, 1.txt:
CID|UID|Key|sis_URL
1|D000108|RDHQFKQIGNGIED|http://sis.gov/regno=0000870779
1|D000108|RDHQFKQIGNGIED|http://sis.gov/regno=0014992622
1|D000644|RDHQFKQIGNGIED|http://sis.gov/regno=0000870779
1|D000644|RDHQFKQIGNGIED|http://sis.gov/regno=0014992622
1|D002331|RDHQFKQIGNGIED|http://sis.gov/regno=0000870779
1|D002331|RDHQFKQIGNGIED|http://sis.gov/regno=0014992622
11|C024565|WSLDOOZREJYCGB|http://sis.gov/regno=0000107062
13|C009947|PBKONEOXTCPAFI|http://sis.gov/regno=0000120821
13|C009947|PBKONEOXTCPAFI|http://sis.gov/regno=0063697187
Вот подмножество второго файла, 2.txt:
CID|bro_URL
11|http://bro.gov/nmbr=0149
13|http://bro.gov/nmbr=0119
Я использую gnuwin32 под Windows 7, 64-разрядная версия с 8 ГБ памяти; поэтому необходимо использовать двойные кавычки для окон. Команда соединения:
join -t"|" -1 1 -2 1 -a1 -a2 -e "NULL" -o "0,1.2,1.3,1.4,2.2" 1.txt 2.txt > 3_.txt
Вот выходной файл 3.txt.
CID|UID|Key|sis_URL|bro_URL
1|D000108|RDHQFKQIGNGIED|http://sis.gov/regno=0000870779|NULL
1|D000108|RDHQFKQIGNGIED|http://sis.gov/regno=0014992622|NULL
1|D000644|RDHQFKQIGNGIED|http://sis.gov/regno=0000870779|NULL
1|D000644|RDHQFKQIGNGIED|http://sis.gov/regno=0014992622|NULL
1|D002331|RDHQFKQIGNGIED|http://sis.gov/regno=0000870779|NULL
1|D002331|RDHQFKQIGNGIED|http://sis.gov/regno=0014992622|NULL
11|NULL|NULL|NULL|http://bro.gov/nmbr=0149
13|NULL|NULL|NULL|http://bro.gov/nmbr=0119
11|C024565|WSLDOOZREJYCGB|http://sis.gov/regno=0000107062|NULL
13|C009947|PBKONEOXTCPAFI|http://sis.gov/regno=0000120821|NULL
13|C009947|PBKONEOXTCPAFI|http://sis.gov/regno=0063697187|NULL
Для CID:11 и CID:13 я ожидаю:
11|C024565|WSLDOOZREJYCGB|http://sis.gov/regno=0000107062|http://bro.gov/nmbr=0149
13|C009947|PBKONEOXTCPAFI|http://sis.gov/regno=0000120821|http://bro.gov/nmbr=0119
13|C009947|PBKONEOXTCPAFI|http://sis.gov/regno=0063697187|http://bro.gov/nmbr=0119
Почему join
в CID:11 и CID:13 не работает?
Примечание. Прежде чем публиковать этот вопрос, я запустил приведенное выше подмножество и получил правильные результаты. Когда я запускаю полный набор, я получаю неправильный результат (подмножество, показанное здесь).
Есть идеи, почему? Любая рекомендуемая альтернатива?
Когда я завершу процесс join
, моя итоговая таблица будет состоять из 15 столбцов. Но я уже застрял в столбце 4.
Любое предлагаемое обходное решение, такое как awk
?
join
для ваших данных дает ожидаемый ответ как с строками заголовков в данных, так и без них. Однако командаjoin
ожидает, что данные в файлах будут отсортированы, и могут происходить забавные вещи, когда входные данные не отсортированы, а строки заголовков означают, что данные не отсортированы. Один из моментов, который вам нужно проверить, — это работает ли удаление заголовков для вас в Windows. Однако до сих пор не очевидно, как это может пойти не так. - person Jonathan Leffler   schedule 28.12.2013