awk -F: 'NR==FNR{a[$0]; next} $1 in a' file1 file2
-F:
установить :
как разделитель полей NR==FNR{a[$0]; next}
создать ключи массива на основе полного содержимого строки file1
$1 in a
print строка из file2
, если первое поле является ключом в массиве a
Похоже, ваши файлы могут иметь окончание строки в стиле dos, и в этом случае вы можете использовать:
awk -F: 'NR==FNR{sub(/\r$/, ""); a[$0]; next} $1 in a' file1 file2
Здесь возврат каретки в конце строк в file1
удаляется перед использованием его в качестве ключа, поэтому он будет соответствовать первому полю file2
. Кроме того, вывод будет в стиле dos.
См. Также Почему вывод моего инструмента перезаписывается и как это исправить?
Если есть пробелы такие символы, как пробел, табуляция и т. д. c в конце строки, что также может вызвать проблему. В таком случае используйте
awk -F: 'NR==FNR{sub(/[[:space:]]*$/, ""); a[$0]; next} $1 in a' file1 file2
. Это удалит лишние пробелы в конце строки, прежде чем использовать ее в качестве ключа. Это также будет работать для файлов в стиле dos.