Что если в файле 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
)
- Сортировать вывод по исходному номеру строки.
- Вычеркните номера строк.
Дайте мне знать, если вам нужна помощь с этим.