2016-03-23 4 views
0

Я пытаюсь отделить RECORDS файла на основе строки «//».Awk double-slash record separator

То, что я попытался это:

awk -v RS="//" '{ print "******************************************\n\n"$0 }' myFile.gb 

Где «******» и т.д., это просто след, чтобы показать мне, что запись расщепляется.

Однако файл также содержит / (сам по себе), и мой след, ****** печатается там, а это означает, что awk интерпретирует их также как мой разделитель записи.

Как я могу получить awk только для разделения записей на // ????

UPDATE: Я бегу на Unix (тот, который поставляется с OS X)

я нашел временное решение, являющееся:

sed s/"\/\/"/"*"/g | awk -v RS="*" ... 

Но должно быть лучше, особенно с массивным файлы, с которыми я работаю.

+0

попробовать 'RS = "\/\ /"' или 'RS =" [/] [ /] "'? Удачи. (Худший случай: 'RS = '[\ /] [\ /]'') – shellter

+0

Я пробовал все это !!!! Но, похоже, навсегда запечатлелось рекорд. Разве это не означает, что он не находит шаблон? – libby

+1

Это зависит от вашей реализации awk. В некоторых RS может быть только одним символом, и когда вы назначаете многосимвольную строку, он просто использует первый. –

ответ

1

На Mac, awk version 20070501 не поддерживается многосимвольный RS. Вот пример использования такого AWK, и сравнение (на той же машине) с простака:

$ /usr/bin/awk --version 
awk version 20070501 

$ /usr/bin/awk -v RS="//" '{print NR ":" $0}' <<< x//y//z 
1:x 
2: 
3:y 
4: 
5:z 

$ gawk -v RS="//" '{print NR ":" $0}' <<< x//y//z 
1:x 
2:y 
3:z 

Если вы не можете найти подходящую awk, а затем выбрать лучший характер, чем *. Например, если вкладки являются приемлемыми, и если ваша оболочка поддерживает $'...', то вы могли бы использовать это заклинание sed:

sed $'s,//,\t,g' 

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

  • Нет связанных вопросов^_^