Там есть специальный инструмент для этого: paste
. Он объединяет каждую полную строку из первого файла с соответствующей строкой из второго файла; Вы можете удалить ненужные столбцы до или после. Например, предполагая, что ваши столбцы разделены табуляцией:
paste file1.txt file2.txt | cut -f 1,2,3,6
Вот способ предварительной фильтрации обоих файлов, основанный на замене процесса ksh / bash / zsh.
paste <(<file1.txt sed 's/[[:space:]][[:space:]]*[^[:space:]]*$//') \
<(<file1.txt sed 's/^[^[:space:]]*[[:space:]][[:space:]]*//')
Awk в первую очередь предназначен для обработки по одному файлу за раз, но вы можете вызвать getline
чтение из другого файла параллельно.
awk '
BEGIN {file2=ARGV[2]; ARGV[2]="";}
{$0 = $0 ORS getline(); print $1, $2, $3, $6;}
' file1.txt file2.txt
До сих пор я предполагал, что вы хотите сопоставить строку 1 файла 1 со строкой 1 файла 2, строку 2 файла 1 со строкой 2 файла 2 и т. Д. Если вы хотите сопоставить содержимое столбца, это совершенно другое дело. join
выполнит работу при условии, что столбец, который вы хотите сопоставить, отсортирован.
pr -m -t -s\ File1.txt File2.txt | gawk '{print $1,$2,$3, $6}' > File3.txt