2015-11-17 4 views
1

У меня есть набор выходных файлов и некоторые из них, как показано ниже:удалить «пустые» строки из сценария оболочки текстового файла

133 0.00295 nurse merit respect muslim 
134 0.00292 high dangerous reassure full 
135 0.00048 
136 0.0039 experience darren 
137 0.00097 _ _param_ui_control_scripts_save _param_pattern_value 
138 0.00292 find director 

И я хочу, чтобы получить следующий файл:

133 0.00295 nurse merit respect muslim 
134 0.00292 high dangerous reassure full 
136 0.0039 experience darren 
137 0.00097 _ _param_ui_control_scripts_save _param_pattern_value 
138 0.00292 find director 

Просто хочу удалить эту конкретную строку, если после второго столбца ничего не получилось. как я могу это сделать? Я совершенно новый для оболочки сценариев?

Возможно, это изменение этой команды? sed '/^$/d'

ответ

6

Если столбцы разделены пробелами, то как проверить, что строки имеют более двух полей? Поскольку NF сохраняет это значение, вы можете просто сказать:

awk 'NF>2' file 

Для вашего данного входа возвращается:

133 0.00295 nurse merit respect muslim 
134 0.00292 high dangerous reassure full 
136 0.0039 experience darren 
137 0.00097 _ _param_ui_control_scripts_save _param_pattern_value 
138 0.00292 find director 
1

Просто для удовольствия, я использовал sed как OP начал с и выдерживают раствор форматирование подробно в случае, когда точное расположение файла журнала может вступить в игру при выборе строк для удаления. Здесь регулярное выражение ищет начало строки, за которым следуют 0 или более чисел, за которым следует пробел, за которым следуют ноль или более чисел, за которым следует буквальный период, за которым следует ноль или более чисел, ноль или больше пробелов, а затем конец линии и удаляет их.

sed '/^[0-9]* [0-9]*\.[0-9]* *$/d' x.log > x_modded.log 

Интересно, что на моей версии Баш на Ubuntu я не смог использовать сокращенную из \ D для цифры и знак плюс для одного или нескольких номеров. Похоже, пришло время сделать некоторое обновление. : -/