2015-04-30 3 views
0

У меня есть файл следующим образом. Я хочу удалить все строки, состоящие из H2, H4, H1 и H6 символов. Для этой цели я использовал эту команду: grep -v "H1" input.gro > output.gro. Но эта команда также удаляет строки, включая H11 и H10. И после 10000-й строки он не удаляет строки. Как я могу исправить мою команду? P.S: Я должен сохранить расстояние между столбцами в выходном файле.Удалить строки, содержащие определенное слово (буква и номер)

XYX C1 1 3.339 0.189 
XYX H11 2 3.376 0.253 
XYX H2 3 3.276 0.260 
XYX H10 4 3.262 0.127 
XYX C1 5 3.443 0.115 
XYX H4 6 3.491 0.193 
XYX H1 7 3.393 0.048 
XYX B3 8 3.552 0.057 
XYX H6 9 3.512 0.026 
... .. . ..... ..... 
XYX H1 9998 3.294 4.293 
XYX H2 9999 3.379 4.287 
XYX H310000 3.377 4.151 
XYX H1110001 0.217 3.143 
XYX N110002 0.299 3.109 
XYX H1010003 0.318 3.022 
XYX C410004 0.277 3.096 

ответ

1

Самый простой способ взломать это добавить пробел после выражения. Чтобы обрабатывать несколько разных символов, вы можете использовать класс символов, который представляет собой один из нескольких символов в вашем выражении.

grep -v "H[1246] " input.gro > output.gro 

уборщик способ сделать это состоит в использовании границы слов, которые являются менее хрупкими и позволяют Grep, чтобы соответствовать шаблону, только если он формирует «слово», где слово определяется как последовательность алфавитно-цифровых символов и подчеркивания.

grep -v "\bH[1246]\b" input.gro > output.gro 
+0

Спасибо. Как я могу удалить все строки, состоящие из H2, H4, H1 и H6 одной командой? – erhan

+0

@erhan, См. Редактирование. – merlin2011

+0

@erhan. Должно быть что-то конкретное о 1000-й строке, которая вызывает проблему, или характер вашего ввода изменяется после этой строки. Вы должны определить, что это такое. – merlin2011

0

Awk - очень читаемый подход, который не требует хаков.

awk '$2!~/H[1246]$/' input.gro > output.gro 
0

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

grep -v -w "H1" input.gro > output.gro 

или все эти матчи вместе

grep -v -w "H[1246]" input.gro > outout.gro 

Учитывая, что ваша правка о возникают проблемы, когда символы из следующего столбца запустить в столбец H1, возможно, вы можете попробовать это:

egrep -v "^.{7}H[1246]" 

, чтобы привязать его к началу строки, проигнорируйте первые 7 символов, затем убедитесь, что у вас есть одно из значений H, которые вы хотите

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