1 (11.08.2013 04:17:39 отредактировано vovanvster)

Здравствуйте.
Существует небольшой текстовый файл в котором попадаются строки c одинаковым текстом но разным количеством пробелов в этих строках. То есть строго говоря они не одинаковые, но несут для пользователя одну и ту же информацию.
Можно ли удалить повторения оставив по одной (любой) строке ?
Сейчас для этого приходится удалять все пробелы и файл становится плохо читаемым.

3.2.7. Запрещено оскорблять участников и отвечать на оскорбления в любой форме — прямой, косвенной или заочной.

2

vovanvster⇓ пишет:

Сейчас для этого приходится удалять все пробелы и файл становится плохо читаемым.

Замените подряд идущие пробелы одним.

sed 's/[\ ][\ ]*/\ /g;s/[\ ]$//g' test.txt
Был, был и весь вышел...

3

Как-то так...

#!/usr/bin/env python
#_*_ coding: utf-8 _*_

with open('file.txt', 'r') as f:
    lines = f.readlines()
l = []
with open('file.txt', 'w') as f:
    for line in lines:
        x = line.split()
        if x not in l:
            f.write(line)
            l.append(x)

ЗЫ. Не проверял, перед использованием сделать резервную копию.

Да, у меня Ubuntu.
Нет, не глючит.

4

Lupo Alberto пишет:

Замените подряд идущие пробелы одним.

sed 's/[\ ][\ ]*/\ /g;s/[\ ]$//g' test.txt

Спасибо, изящное решение. Почему я сам не догадался ?

3.2.7. Запрещено оскорблять участников и отвечать на оскорбления в любой форме — прямой, косвенной или заочной.

5

vovanvster⇓ пишет:

Спасибо, изящное решение.

Увы, это не изящно...

Был, был и весь вышел...

6

-=Serj=-, Спасибо но чё-та я не готов сюда python вмешивать. Тут большой скрипт на баше и не стоит в середине скрипта python вызывать. Тогда уж изначально на питоне писать надо.

3.2.7. Запрещено оскорблять участников и отвечать на оскорбления в любой форме — прямой, косвенной или заочной.

7

Lupo Alberto пишет:
vovanvster⇓ пишет:

Спасибо, изящное решение.

Увы, это не изящно...

Имел ввиду не sed а саму идею привести строки к подобному виду для облегчения обработки.

3.2.7. Запрещено оскорблять участников и отвечать на оскорбления в любой форме — прямой, косвенной или заочной.

8

vovanvster⇓ пишет:

Имел ввиду не sed а саму идею привести строки к подобному виду для облегчения обработки.

Кстати, изящнее, чем sed с этой задачей врядли какая программа справится bx

Был, был и весь вышел...

9

Lupo Alberto пишет:

Кстати, изящнее, чем sed с этой задачей врядли какая программа справится bx

awk ?

3.2.7. Запрещено оскорблять участников и отвечать на оскорбления в любой форме — прямой, косвенной или заочной.

10

vovanvster⇓ пишет:

awk ?

Не думаю, что получится «изящнее» — awk всё же предназначен для другого.

Был, был и весь вышел...

11

tr с опцией "-s" это делает:

tr -s " " " " <input_file

Пётр.

Пётр.

12

Поясните мысль. Не делает.

3.2.7. Запрещено оскорблять участников и отвечать на оскорбления в любой форме — прямой, косвенной или заочной.

13

vovanvster пишет:

Поясните мысль. Не делает.

Виноват, поспешил, эта команда только заменяет несколько пробелов одним.
Тогда строки с одинаковым текстом будут иметь также и одинаковое
количество пробелов, т.е. будут совпадать и их проще будет выявить.

Пётр.

Пётр.