Объедините два списка при удалении дубликатов

Можно использовать xargs вместо цикла для выполнения той же команды в списке элементов. Существуют опции заботиться о пробелах.

19
06.05.2018, 20:52
7 ответов

Я думаю

sort file1 file2 | uniq
aaaaaa
bbbbbb
cccccc
mmmmmm
nnnnnn
yyyyyy
zzzzzz

сделает то, что Вы хотите.

Дополнительная документация: uniq вид

29
27.01.2020, 19:44
  • 1
    busybox поддерживает уникальный флаг -u. –  Thor 02.10.2012, 21:53
  • 2
    @Thor: ох аплодисменты, это не переключатель, с которым я знаком. –   02.10.2012, 23:18

Во всего одной команде без любого канала:

sort -u FILE1 FILE2

поиск

Подавите дублирующиеся строки

-> http://www.busybox.net/downloads/BusyBox.html

10
27.01.2020, 19:44

Другое решение:

awk '!a[$0]++' file_1 file_2
4
27.01.2020, 19:44
  • 1
    я видел, что это имело значение, какой аргумент был на первом месте. В других отношениях отличное решение, спасибо. –  dezza 08.01.2017, 17:21

Сортировать по для некоторых ключевых столбцов используйте следующее:

awk '!duplicate[$1,$2,$3]++' file_1 file_2

здесь рассматривайте первый, второй и третий столбцы в качестве первичного ключа.

2
27.01.2020, 19:44

Файлы по вашему вопросу отсортированы.
Если исходные файлы действительно отсортированы, вы можете уникировать и объединить их за один шаг :

.
sort -um file1 file2 > mylist.merge

Для числовой сортировки (, а не буквенно-цифровой ), используйте:

sort -num file1 file2 > mylist.merge

Это могло не быть сделано в -месте (, перенаправленном на один исходный файл ).

Если файлы не отсортированы, отсортируйте их (эту сортировку можно выполнить на месте, используя опцию сортировки -o. Однако весь файл должен быть загружен в память ):

.
sort -uo file1 file1
sort -uo file2 file2
sort -um file1 file2 > mylist.merge
mv mylist.merge originallist

Это было бы быстрее, чем более простая «одна командная строка» для сортировки всех:

cat file1 file2 | sort -u >mylist.merge

Однако эта строка может быть полезна для небольших файлов.

2
27.01.2020, 19:44

При использовании переменных вместо файлов:

sort -u <(printf '%s\n' "${list1}") <(printf '%s\n' "${list2}")
0
09.09.2021, 00:44
awk '{if(!seen[$0]++)print $0}' file1 file2

выход

aaaaaa
bbbbbb
cccccc
mmmmmm
nnnnnn
yyyyyy
zzzzzz

Питон

#!/usr/bin/python
import re
final_list=[]
g=open('file1','r')
for vb in g:
    if vb.strip() not in final_list:
        final_list.append(vb.strip())
g.close()        
b=open('file2','r')
for hj in b:
    if hj.strip() not in final_list:
        final_list.append(hj.strip())

b.close()
print "\n".join(final_list)

выход

aaaaaa
bbbbbb
cccccc
mmmmmm
nnnnnn
yyyyyy
zzzzzz
0
10.09.2021, 11:40

Теги

Похожие вопросы