Как удалить дублирующиеся строки из файла

Именованные тома не должны терять данные, как объяснено в документации :

Тома являются предпочтительным механизмом для сохранения данных, генерируемых и используемых контейнерами Docker.

Что вам действительно нужно, так это убедиться, что вы сохраняете базу данных в правильном каталоге, который будет использовать указанный том. Я предлагаю создать конкретный каталог внутри вашего приложения фляги, чтобы сохранить файл sqlite3, а затем смонтировать этот каталог на указанный вами том. Например, ваш путь к файлу sqlite3: /home/myflaskapp/db, тогда монтирование будет следующим: в противном случае вы потеряете данные, потому что вы не смонтировали правильный путь, который хотите сохранить:

docker run -p 5000:5000 -v mydb:/home/myflaskapp/db my-app

15
задан codeforester 6 April 2018 в 20:12
поделиться

4 ответа

uniq (1)

ОПИСАНИЕ

uniq [ОПЦИЯ] ... [ВХОД [ВЫХОД]]

ОПИСАНИЕ

Отменить все, кроме одной, последовательные идентичные строки из INPUT (или стандартного ввода), записи в OUTPUT (или стандартный вывод).

Или, если вы также хотите удалить несмежные дубликаты, этот фрагмент perl сделает это:

while(<>) {
    print $_ if (!$seen{$_});
    $seen{$_}=1;
}
19
ответ дан 1 December 2019 в 00:33
поделиться

В дополнение к ответам uniq , которые прекрасно работают, если вы не возражаете против сортировки вашего файла . Если вам нужно удалить несмежные строки (или если вы хотите удалить дубликаты, не переставляя свой файл), следующий Perl-однострочник должен это сделать (украдено из здесь ):

cat textfile | perl -ne '$H{$_}++ or print'
24
ответ дан 1 December 2019 в 00:33
поделиться

Если вы заинтересованы в удалении смежных дубликаты строк, используйте uniq .

Если вы хотите удалить все дубликаты строк, а не только соседние, то это сложнее.

1
ответ дан 1 December 2019 в 00:33
поделиться

Вот то, что я придумал, пока я ждал ответа здесь (хотя пришел первый (и принятый) ответ примерно через 2 минуты). Я использовал эту замену в VIM :

%s/^\(.*\)\n\1$/\1/

Это означает: ищите строки, где после новой строки у нас то же самое, что и раньше, и заменяйте их только тем, что мы захватили в первой строке.

uniq определенно проще, хотя.

1
ответ дан 1 December 2019 в 00:33
поделиться
Другие вопросы по тегам:

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