删除没有4列的行

时间:2013-12-18 07:51:58

标签: sed awk

我有一些文件如下。我想删除没有4列的行。

263 126.9   263 50.2
264 76.6    264 6.2
265 62.3    265 49.9
266 84.2    266 18.3
7   63.8
8   59.7
9   36.4
11  12.0

期望的输出

263 126.9   263 50.2
264 76.6    264 6.2
265 62.3    265 49.9
266 84.2    266 18.3

3 个答案:

答案 0 :(得分:5)

直截了当
awk 'NF==4' input.txt

NF是字段数,如果它等于4,则执行默认操作,即打印整行。

答案 1 :(得分:1)

sed '/\([^[:blank:]]\{1,\}[[:blank:]]\{1,\}\)\{3\}[^[:blank:]]\{1,\}/ !d'

在此示例中,使用

进行优化
sed '/\([0-9.]\{1,\}[[:blank:]]\{1,\}\)\{3\}[0-9.]\{1,\}/ !d'

包括仅4列的sudo_O备注(其他允许更多打印)和列数的参数变量(必须至少为2)

ColNbr=4
ColBefore=$(( ${ColNbr} - 1 ))
sed "/^\([^[:blank:]]\{1,\}[[:blank:]]\{1,\}\)\{${ColBefore}\}[^[:blank:]]\{1,\}[[:blank:]]*$/ !d"

正如他所说,sed不是在这种情况下使用的优化工具(阅读参数评论)

答案 2 :(得分:0)

这可能适合你(GNU sed):

sed -r 's/\S+/&/4;t;d' file