Зачем использовать запутанный sed
/ xargs
l oop, если все это можно сделать в awk
? Хуже всего ваша команда выполняет ввод-вывод нового файла для каждой новой записи в первом файле.
awk 'FNR == NR { lines[$1]; next } $1 in lines { $0 = "done" }1' f1 f2 > f3
Команда awk
работает, помеча все строки в первом файле в массив lines
а затем при поиске второй файл $1 in lines
будет соответствовать тем строкам во втором файле, содержимое строк которых хешируется в массиве lines
. В таком случае измените текущую строку на "done"
и напечатайте ее {..}1
или по умолчанию распечатайте строки для несовпадающих строк.
$1 in line
можно заменить на $0 in line
, пока вы сопоставление содержимого обоих файлов по «всей» строке. Для соответствия c позиции столбца укажите фактический столбец.