Как создать новый файл, объединяющий отдельные столбцы из двух отдельных файлов с помощью awk? Не портя порядок элементов ОБА файлов.
Пример: Файл 3 может содержать столбец 1,2,3 из файла 1 и столбец 4 из файла 2.
File 1
A 23 8 T
A 63 9 9
B 45 3 J
File 2
A 0
A 6
B 5
File 3
A 23 8 0
A 63 9 6
B 45 3 5
text-processing
awk
columns
dovah
источник
источник
pr -m -t -s\ File1.txt File2.txt | gawk '{print $1,$2,$3, $6}' > File3.txt
paste file1 file2
а затем распечатать выбранные поля вawk
.file2
в памяти, что может быть непозволительно, если файлы большие. Есть более простой способ сделать это без затрат памяти (см. Мой ответ).Там есть специальный инструмент для этого:
paste
. Он объединяет каждую полную строку из первого файла с соответствующей строкой из второго файла; Вы можете удалить ненужные столбцы до или после. Например, предполагая, что ваши столбцы разделены табуляцией:Вот способ предварительной фильтрации обоих файлов, основанный на замене процесса ksh / bash / zsh.
Awk в первую очередь предназначен для обработки по одному файлу за раз, но вы можете вызвать
getline
чтение из другого файла параллельно.До сих пор я предполагал, что вы хотите сопоставить строку 1 файла 1 со строкой 1 файла 2, строку 2 файла 1 со строкой 2 файла 2 и т. Д. Если вы хотите сопоставить содержимое столбца, это совершенно другое дело.
join
выполнит работу при условии, что столбец, который вы хотите сопоставить, отсортирован.источник