如何删除行中具有一个值的所有行?

如何删除行中具有一个值的所有行?

我有一个文件如下

input file
0.0  4  6  5  1  2  9  4  5  1  ..... 
0.25
0.5  3  1  
1.0  3  7  8  2  
1.5  3  3  3  4  6  4  5   
2.0  
2.5  6  7  6  9 

我想删除该行中只有一个值的所有行,因此结果将是这样的

out file  
0.0  4  6  5  1  2  9  4  5  1  ..... 
0.5  3  1  
1.0  3  7  8  2  
1.5  3  3  3  4  6  4  5   
2.5  6  7  6  9 

答案1

一种方法使用awk.使用 NF(字段数)仅打印字段数大于 1 的行。

awk <oldfile >newfile 'NF>1'

例子

awk <oldfile >newfile 'NF>1'
cat newfile
0.0  4  6  5  1  2  9  4  5  1  .....
0.5  3  1
1.0  3  7  8  2
1.5  3  3  3  4  6  4  5
2.5  6  7  6  9

答案2

如果有两个或多个数字,则必须至少有一个分隔符。如果这是 aspace那么 grep 就只是

grep ' '

如果您的文件在行尾可能有多余的空格,则搜索空格后跟数字 或.(如果数字可能是.25)。

grep ' [0-9.]'

如果开头可能有多余的空格或者然后在末尾和中间有多余的空格

grep '[0-9.]  *[0-9].'

答案3

您可以使用 grep 或 sed 来完成此操作。

sed

sed -e '/^[[:space:]]*[[:digit:].]\+[[:space:]]*$/d' input >output

对于 grep,使用-E正则表达式选项和-v排除匹配项的选项:

grep -v -E '^[[:space:]]*[[:digit:].]+[[:space:]]*$' input >output

这种模式的原因是忽略没有数字值,并处理带有前导或尾随空格的情况。如果这些都不感兴趣,那么更简单的解决方案“有效”。

相关内容