Там є спеціальний інструмент для цього: 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