2013-03-18 5 views
1

У меня проблема с файлом, содержащим ~ 80 000 строк. Это большой файл размером 23 ГБ. Мне удалось кусок до подобных файлов такого размера с помощью следующей команды:очень длинная строка, вызывающая проблемы

awk '{fn = NR % 24; print > ("file1_" fn)}' file1 

Однако, эта команда киосков на этом одна проблемы файл. Файл проблемы имеет очень большую строку в 3 миллиарда символов (самые длинные строки в других файлах составляют менее 1 миллиарда), и я предполагаю, что это проблема.

Я хотел бы избавиться от этой длинной строки из файла и продолжить, но это сложно. Я бы просто использовал следующее:

awk 'length < 1000000000' file1 > file2 

Однако, это также работает через 3.5 часа. Есть ли быстрый способ просто пройти через файл и момент, когда количество символов в строке превышает, например. 1 миллиард, он перестает считать и переходит к следующей строке?

+0

Я ничего не знаю об этой проблеме («я рассматриваю возможность использования c для ответа), но это звучит интересно. –

+0

Какую версию awk вы используете ('awk -version')? Возможно, новая версия GNU awk (gawk) - это все, что вам нужно. –

+0

Это GNU Awk 3.1.5 – user1308144

ответ

1

Возможно, вы могли бы попытаться объединить две строки awk в одну команду, это может быть быстрее. Потому что он обрабатывает ваш файл монстра только один раз. Но вы должны проверить.

awk '{fn = NR % 24; if(length< 1000000000) print > ("file1_" fn)}' file1 
0

Попробуйте использовать СЭД, чтобы удалить строки длиннее, чем определенное количество символов

# delete lines longer than 65 characters 
sed '/^.\{65\}/d' file 

Вы также можете использовать 2-ступенчатый подход:

# use sed to output the line numbers containing lines 
# longer than a certain number of characters 
sed -n '/^.\{65\}/=' file 

, а затем использовать этот список постройте skip-list в awk, т.е. если NR равно любому из этих чисел, пропустите эту строку.

Смежные вопросы