我有一个文件如下
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
这种模式的原因是忽略没有数字值,并处理带有前导或尾随空格的情况。如果这些都不感兴趣,那么更简单的解决方案“有效”。