从文本文件 shell 脚本中删除 "empty" 行
remove "empty" lines from a text file shell script
我有一组输出文件,其中一些如下:
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
只是想删除第二列之后没有任何内容的特定行。我该怎么做 我是 shell 脚本编写的新手?
可能是对该命令的修改? sed '/^$/d'
如果列是 space 分隔的,如何检查行是否包含两个以上的字段?由于 NF
存储了这个值,你可以简单地说:
awk 'NF>2' file
对于您给定的输入 returns:
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
只是为了好玩,我在 OP 开始时使用了 sed
并保留了详细的解决方案格式,以防日志文件的确切布局在选择要删除的行时发挥作用。此处正则表达式查找行的开头,后跟 0 个或多个数字,然后是 space,然后是零个或多个数字,然后是文字句点,后跟零个或多个数字,零个或多个 spaces 然后在行尾删除它们。
sed '/^[0-9]* [0-9]*\.[0-9]* *$/d' x.log > x_modded.log
有趣的是,在 Ubuntu 上的 bash 版本中,我无法将 \d 的 shorthand 用于数字,而加号用于一个或多个数字。看来是时候进行一些更新了。 :-/
我有一组输出文件,其中一些如下:
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
只是想删除第二列之后没有任何内容的特定行。我该怎么做 我是 shell 脚本编写的新手?
可能是对该命令的修改? sed '/^$/d'
如果列是 space 分隔的,如何检查行是否包含两个以上的字段?由于 NF
存储了这个值,你可以简单地说:
awk 'NF>2' file
对于您给定的输入 returns:
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
只是为了好玩,我在 OP 开始时使用了 sed
并保留了详细的解决方案格式,以防日志文件的确切布局在选择要删除的行时发挥作用。此处正则表达式查找行的开头,后跟 0 个或多个数字,然后是 space,然后是零个或多个数字,然后是文字句点,后跟零个或多个数字,零个或多个 spaces 然后在行尾删除它们。
sed '/^[0-9]* [0-9]*\.[0-9]* *$/d' x.log > x_modded.log
有趣的是,在 Ubuntu 上的 bash 版本中,我无法将 \d 的 shorthand 用于数字,而加号用于一个或多个数字。看来是时候进行一些更新了。 :-/