删除"清空#34;来自文本文件shell脚本的行

时间:2015-11-17 11:43:50

标签: linux shell text-processing blank-line

我有一组输出文件,其中一些如下:

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'

如果在第二列之后没有任何内容,则只想删除该特定行。我怎么能这样做我是shell脚本的新手?

可能是对此命令的修改? CloudSettings

2 个答案:

答案 0 :(得分: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 :(得分:1)

为了好玩,我使用了sed作为OP的开头,并保留了解决方案的格式,以便在选择要删除的行时日志文件的确切布局可能会起作用。这里正则表达式查找行的开头,后跟0或更多数字,后跟一个空格,后跟零个或多个数字,后跟一个文字句点,后跟零个或多个数字,零个或多个空格然后结束该行并删除它们。

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

有趣的是,在我的Ubuntu版本的bash上,我无法使用\ d表示数字的简写和一个或多个数字的加号。看起来是时候做一些更新了。 : - /