如果最后一列包含少于2个值,则将删除整行
示例数据:
18106|1.0.4.0/22|223 121 1836
3549|1.0.10.0/24|421 21
5413|1.0.0.0/16|789
2152|1.4.0.0/16|745 89 1876
3549|1.0.8.0/22|680
预期产出:
18106|1.0.4.0/22|223 121 1836
3549|1.0.10.0/24|421 21
2152|1.4.0.0/16|745 89 1876
有什么办法吗?
答案 0 :(得分:0)
短 awk 解决方案:
awk -F'\\|' 'split($NF,a," ")>=2' file
输出:
18106|1.0.4.0/22|223 121 1836
3549|1.0.10.0/24|421 21
2152|1.4.0.0/16|745 89 1876
split($NF,a," ")
- 按空格拆分最后一个字段并返回块数答案 1 :(得分:0)
如果单个值后面没有空格,您可以在最后|
之后删除没有空格的行:
grep -v '|[^ |]*$'
[...]
是一个角色类。 [ |]
匹配空格或|
。^
否定它,即[^ |]
匹配除空格或|
之外的任何内容。*
表示"重复零次或多次" $
匹配行尾-v
显示与它不适用于你的样本数据,因为789之后还有一个空格。所以,在最后|
之后检查空格,然后是非空格:
grep '|[^ |]\+ [^ |]\+'
此处,\+
表示"重复一次或多次"。