Я хочу присоединиться к этим 2 файлам: Файл 1 (1 миллион строк) и Файл 2 (10 000 строк) в новом Файле 3 (должен быть 1 миллион строк), использование awk
команда
Файл 1:
471808241 29164840 1 10001 156197396
471722917 21067410 1 31001 135961856
471941441 20774160 1 7001 180995072
471568655 29042630 1 15001 157502996
471524711 20716360 1 4001 180226817
471873918 29583520 1 2001 128567298
471568650 29042631 1 15002 157502910
Файл 2
610146 156197396
531101 135961856
704011 180226817
502216 128567298
707012 180995072
615246 157502996
685221 157502910
Желаемый вывод:
471808241 29164840 1 10001 156197396 610146
471722917 21067410 1 31001 135961856 531101
471941441 20774160 1 7001 180995072 707012
471568655 29042630 1 15001 157502996 615246
471524711 20716360 1 4001 180226817 704011
471873918 29583520 1 2001 128567298 502216
471568650 29042631 1 15002 157502910 685221
Я не знаю, насколько эффективный это будет для файлов размера, который Вы упоминаете, но так как Вы попросили awk
решение, которое это - действительно просто вопрос создания справочной таблицы из второго файла и затем использования последнего поля первого файла, который включит в него, например,
awk 'NR==FNR {a[$2]=$1; next} {$(NF+1) = a[$NF]} 1' file2 file1 > file3
Примечание, что Вы не указываете то, что должно быть сделано в случае, что там не идет ни в какое сравнение - в этом случае, это добавит пустое поле. Если это не желаемое поведение, можно протестировать, существует ли $NF
в a
сначала.
Если Вы не возражаете сортировать файлы, Вы могли бы использовать join
(хотя это не могло бы быть практично для Вашего случая, это интересно видеть, как это могло бы быть сделано),
Первый вид File 2
на общем числовом поле
sort -k2 "File 2" > file2clean
Затем Вы можете join
эти два файла
sort -k5 "File 1" | join -a 1 -o 1.1 1.2 1.3 1.4 0 2.1 -1 5 -2 2 - file2clean | tee "File 3"
-a 1
распечатайте строки в File 1
это не может быть соединено (так как этот файл имеет больше строк, я предполагаю, что это - то, что Вы хотите),-o 1.1 1.2 1.3 1.4 0 2.1
полевой порядок на выходную строку - поле, на котором мы присоединяемся, 0
, и 1.1
первое поле первого файла и так далее-1 5 -2 2
соединение на 5-м поле первого файла и 2-м поле второго файла- file2clean
здесь -
представляет стандартный вход, провел конвейер, т.е. отсортированную версию File 1
При выполнении можно удалить промежуточное звено file2clean
.