Что если в файле 2 есть символы после каждого из этих символов? Я хочу сделать то же самое, но сохранить за собой символы.
Хорошо, сделайте копию file2 котором есть только поле, по которому вы хотите выполнить фильтрацию.
И, если текущий file2 имеет «неуникальный символ», за которым сразу же следуют «завершающие символы» (например, efr-42 , rte-17 и т.д.), Сделайте еще одну копию file2 где они разделены пробелом.
Вот примеры команд на основе предоставленных вами данных примера:
sed 's/\(...\).*/\1/' file2.sorted > file2.symbol_only
sed 's/\(...\)\(.*\)/\1 \2/' file2.sorted > file2.separated
или же
sed 's/\([^-]*\)-.*/\1/' file2.sorted > file2.symbol_only
sed 's/\([^-]*\)\(-.*\)/\1 \2/' file2.sorted > file2.separated
… На основе новых данных, которые вы добавили в свой вопрос.
Затем используйте comm как раньше:
comm -13 file1.sorted file2.symbol_only > file2.no_match
... и соедините символы с последними символами:
join file2.no_match file2.separated
При необходимости используйте другой sed для удаления добавленных вами пробелов.
Мне пришло в голову, что вы могли бы использовать этот трюк, чтобы вернуть выходной файл в исходный порядок file2 .
- Создайте копию исходного
file2 с номерами строк.
- Перемешайте номера строк справа от символов.
- (выше, начиная с команд
sort )
- Сортировать вывод по исходному номеру строки.
- Вычеркните номера строк.
Дайте мне знать, если вам нужна помощь с этим.