如果行包含4列中的数字,则从文件中删除整行

时间:2017-09-26 11:12:39

标签: bash awk sed grep

我是bash的新手,面对的情况是我需要解析一个巨大的文件,但并非一切对我来说都很有趣。该文件包含由'。'分隔的数据列表。分隔符,列数因行而异。

我想从输出中排除以下模式:如果前4列包含数字。

这是一个例子(只有第一行应从输出中排除):

123.123.123.123.abc.abc.abc
123.123.123.abc.abc
abc.abc.123.123.abc

我已经使用awk寻找了一些解决方案,但到目前为止还没有成功。

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

grep 解决方案:

grep -Ev '^([0-9]+\.){4}' file

输出:

123.123.123.abc.abc
abc.abc.123.123.abc

答案 1 :(得分:0)

请您试着跟随并告诉我这是否对您有帮助。

awk -F"." 'match($0,/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/){next} 1' Input_file

输出如下。

123.123.123.abc.abc
abc.abc.123.123.abc

说明:将字段分隔符设置为DOT(。),然后使用awk的匹配功能并查找连续的4个字段,其中包含数字,如果是,则使用next(将跳过所有进一步的陈述)。然后在这里提到1打印除了具有匹配模式的线之外的线。

答案 2 :(得分:0)

在awk中你可以使用两个小于或等于这样的替代方案:

awk -F. 'NF<6' file or
awk -F. 'NF==5' file

123.123.123.abc.abc
abc.abc.123.123.abc