LINUX.ORG.RU
решено ФорумAdmin

-bash: /bin/sed: Argument list too long

 


0

1

Задача: есть два списка, А и В, в них — по 140000 и 550000 идентификаторов формата [0-9A-F]{12} по одному в строке. Список А является частью списка В. Надо составить список С, который представляет собой разницу между А и В, т. е. те идентификаторы, которые не упомянуты в первом списке но не упомянуты во втором.

Казалось бы решение простое — первый список по сути один большой regexp, и значения в нём надо лишь разделить вертикальной чертой, после чего подсунуть в sed на удаление.

#/bin/bash

# Если мы не на последней строке, то к концу линии дописать вертикальную черту.
# Потом в tr стереть все переводы строк.

regex=`sed -r '$ !s/$/|/g' ./list_A | tr -d '\n'`

# Подставляем regexp

sed -r '/'$regex'/d' ./list_B >./list_C
Однако при попытке запуска вместо списка С получается сабж. А как же строки до двух гигабайт?

Deleted

Последнее исправление: fargred (всего исправлений: 2)
Ответ на: комментарий от lazyklimm

А у меня sort не заглохнет где-нибудь на двенадцатой тысяче? Хотя щас попробую.

Deleted
()

Ещё есть «grep -f ИМЯ_файла», с добавлением, если надо, опций "-F" и "-v".

mky ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.