#bash #shell
#bash #оболочка
Вопрос:
Я хочу найти неуникальные строки из 2 несортированных файлов (скажем, file1 и file2). Я должен выполнить для этого 3 команды.
сортировка file1> file1_sort
сортировка file2 > file2_sort
comm -3 file1_sort file2_sort
Могу ли я сделать это без создания временных файлов и одной командой?
Спасибо,
Ответ №1:
comm -3 <(sort file1) <(sort file2)
Комментарии:
1. 1. Стоит отметить, что подстановка процессов не является стандартной (доступна не во всех оболочках типа Bourne ).
Ответ №2:
Ваше описание не соответствует имеющимся у вас командам. Вы говорите, что вам нужны неуникальные строки, но have comm -3
который удаляет неуникальные строки.
sort file1 file2 | uniq -d
sort file1 file2 | uniq -u
В первой строке отображаются неуникальные строки (то есть те, которые находятся как в file1, так и в file2). Во второй строке отображаются уникальные строки (то есть те, которые отображаются только в file1 или file2, но не в обоих).
Ответ №3:
Если вас интересуют неуникальные строки, попробуйте это:
cat file1 file2 | sort | uniq -c | sort -n
Ответ №4:
вам вообще не нужно сортировать.
awk 'NR==FNR{a[$0]=1}NR>FNR{if($0 in a)print $0}' file1 file2 > result.file