Можно использовать xargs
вместо цикла для выполнения той же команды в списке элементов. Существуют опции заботиться о пробелах.
Во всего одной команде без любого канала:
sort -u FILE1 FILE2
поиск
Подавите дублирующиеся строки
Сортировать по для некоторых ключевых столбцов используйте следующее:
awk '!duplicate[$1,$2,$3]++' file_1 file_2
здесь рассматривайте первый, второй и третий столбцы в качестве первичного ключа.
Файлы по вашему вопросу отсортированы.
Если исходные файлы действительно отсортированы, вы можете уникировать и объединить их за один шаг :
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
Однако эта строка может быть полезна для небольших файлов.
При использовании переменных вместо файлов:
sort -u <(printf '%s\n' "${list1}") <(printf '%s\n' "${list2}")
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
-u
. – Thor 02.10.2012, 21:53