Удалить строки из файла - PullRequest
3 голосов
/ 27 апреля 2009

Я делаю некоторую обработку текста в системе Unix. У меня есть доступ к командной строке на этом компьютере, на ней установлены Python, Perl и программы обработки текста по умолчанию, awk и т. Д.

У меня есть текстовый файл, который выглядит следующим образом:

2029754527851451717 
2029754527851451717 
2029754527851451717 
2029754527851451717 
2029754527851451717 
2029754527851451717 1232453488239 Tue Mar  3 10:47:44 2009
2029754527851451717 1232453488302 Tue Mar  3 10:47:44 2009
2029754527851451717 1232453488365 Tue Mar  3 10:47:44 2009
2895635937120524206 
2895635937120524206 
2895635937120524206 
2895635937120524206 
2895635937120524206 
2895635937120524206 
5622983575622325494 1232453323986 Thu Feb 12 15:57:49 2009

Это в основном 3 строки: ID ID Date

Я хочу удалить все строки, у которых нет 2 идентификаторов и даты. Итак, окончательные результаты будут такими:

2029754527851451717 1232453488239 Tue Mar  3 10:47:44 2009
2029754527851451717 1232453488302 Tue Mar  3 10:47:44 2009
2029754527851451717 1232453488365 Tue Mar  3 10:47:44 2009
5622983575622325494 1232453323986 Thu Feb 12 15:57:49 2009

Как бы вы, ребята, предложили это сделать? Всего текстовый файл имеет длину около 30 000 строк.

Приветствия

Eef

Ответы [ 9 ]

14 голосов
/ 27 апреля 2009

С awk:

awk 'NF > 2' input_file > output_file
8 голосов
/ 27 апреля 2009
grep ':' filename
5 голосов
/ 27 апреля 2009
with open(source_filename) as src:
    with open(dest_filename, 'w') as dst:
        for line in src:
            if len(line.split()) > 1:
                dst.write(line)
4 голосов
/ 27 апреля 2009

с Perl:

perl -ne 'print if /^([0-9]+\s+){2}.+$/' $filename
3 голосов
/ 27 апреля 2009

Просто работаю с моим Perl здесь, но это также может помочь:

perl -lane 'if (scalar(@F) == 3) { print @F;}' file >> file.out
2 голосов
/ 27 апреля 2009

с Python:

file = open(filename, 'r')
lines = file.readlines()
file.close()

p = re.compile('^\d*$')

for line in lines:
    if not p.search(line): print line,
1 голос
/ 08 августа 2013
perl -i -lane 'print if($F[1])' file
1 голос
/ 27 апреля 2009
awk "NF>1" < filename
0 голосов
/ 27 апреля 2009
sed '/^[0-9]$/d'  filename

(возможно, придется изменить шаблон, если плохие строки имеют завершающие пробелы). Вы также можете использовать grep -v, который пропустит соответствующий шаблон.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...