2013-04-12 3 views
1

Следующая инструкция grep работает должным образом. Но это занимает много времени, если размер файла слишком велик (40GB)выбор данных из большого файла

grep '^INSERT' test.txt > new.txt 

1) Есть ли другой способ быстро получить список всех «INSERT» заявления из этого файла?

2) Есть ли команда для быстрого удаления первых 100 строк из этого файла?

+0

Какая у вас местность? 'echo $ LANG' – devnull

+0

- ваш вопрос 1 и 2 для одной задачи или две задачи? – Kent

+0

# local - это # ​​en_US.UTF-8 ## вопрос 1 и 2 для одной задачи. Инструкция INSERT начинается после первых 100 строк – shantanuo

ответ

1

Вы можете сравнивать строки вместо матча регулярного выражения, но с 40GB не будет никакой волшебной команды вам все равно придется проверять каждую строку:

$ awk '$1=="INSERT"' test.txt > new.txt 

Что касается второго вопроса использования sed:

$ sed -i '1,100{d;q}' test.txt 
1

Вы делаете это с диска шпинделя? Если да, попробуйте SSD. Или, если вы можете себе это позволить, получите машину с достаточным количеством ОЗУ для размещения всего файла.

1

Первая операция должна быть намного быстрее, следующим образом:

LANG=en_US grep '^INSERT' test.txt > new.txt 

(если вы используете локаль с поддержкой UTF-8)

2
sed -n '1,100\!{/^INSERT/p}' test.txt > new.txt & 

Вы можете отправить процесс в фоновый режим с «&» и продолжить работу. Используйте команду ps, чтобы проверить состояние фоновых процессов.