2014-02-20 5 views
0

завожусь ВИМ помощь с поиском файлаVIM: поиск файлов для несовпадающих числовых значений

Я хотел бы помощь, чтобы найти какие-то данные в файле, который, скажем, 1,6 миллиона записей/линий.

Записи следуют шаблону, очень похожим на то, что ниже, и я хотел бы найти все записи БЕЗ 16 цифр во втором столбце чисел, а затем все эти записи/строки были перенесены в верхнюю часть или взяты снизу ,

В этом примере я сделал некоторые записи, не имеющие 16 цифр. Есть только три записи с 16 цифрами, и их следует взять на дно, а пять без 16 цифр должны быть подняты на верх. [обновил пример данных, но он не выравнивает правильно здесь ... смотрите: http://pastiebin.com/53059f6a0a218

A1553419V 4111111851111111 111811_2519104          
U1753419V 411001111111111 111811_2519104          
I1053419V 41111111881111 111811_2519104          
J1253419V 3566002020360505 111811_2519104          
P1153419V 378282246310005 111811_2519104          
C1953419V 12345678900000 111811_2519104          
T1953419V 852741369123  111811_2519104          
W1353419V 5610591081018250 111812_2519104          

линия заканчивается на колонке 80, кстати.

В этом примере я хотел бы узнать о строках: 2, 3, 5, 6, 7. Линии 1,5,8 все имеют 16-значное число в центральной колонке.

Это действительно базовый синтаксис просто выделить все 16 цифр номера, но проходящие через миллион плюс записей для этого глупо: /\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d

Спасибо за любую помощь с разрешением до этого.

Да, любой язык сценариев, возможно, был бы лучше подходит, и если вы готовы написать что-то простое, чтобы помочь миру, будь моим гостем.

ответ

4

Попробуйте это:

:v/ [0-9]\{16} /m 0 
  • :v - для линий, не совпадающих
  • / [0-9]\{16} / - пространство, 16 цифр, пробел
  • m 0 - переместить их вверх (используйте $ вместо 0 двигаться снизу)

EDIT: Как прокомментировал Инго, для этого нужно сбежать {.

+0

Мои результаты можно прочитать здесь: http://pastiebin.com/530592598c418 Любые предложения? –

+1

'[0-9]' может быть записано как '\ d', и вам нужно либо переключиться в очень магический режим с помощью' \ v', либо использовать '\ {16}'. –

+0

Это может быть или не иметь значения, но решение @ danadam отменяет порядок всех строк, перемещенных в верхнюю часть. Измените 'm0' на' m $ ', и они будут перемещены в нижней части файла, а не сверху, и порядок будет сохранен. – benjifisher

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