删除最后一个字段的整行值

时间:2017-06-10 17:15:27

标签: linux bash shell

如果我在最后一个字段中找到64512到65535之间的任何值,那么整行将被移除:

示例数据:

20170101|1.0.136.0/24|2497 38040 28969
20170101|1.0.137.0/24|2497 38040 33423
20170101|1.0.138.0/24|2497 38040 64603
20170101|1.0.139.0/24|2497 38040 10136
20170101|1.0.142.0/24|2497 38040 65222
20170101|1.0.144.0/24|2497 38040 65535

预期产出:

20170101|1.0.136.0/24|2497 38040 28969
20170101|1.0.137.0/24|2497 38040 33423
20170101|1.0.139.0/24|2497 38040 10136

有什么办法吗?

4 个答案:

答案 0 :(得分:0)

不清楚你的意思是"最后一个字段"。此数据是否由|分隔,使第一行中的最后一个字段为字符串2497 38040 28969?或者,文本是否用空格分隔,最后一个字段只是28969?后者更容易做到:

awk '$NF<64512 || $NF > 65535' input-file

如果是前者,你需要更加努力地工作。

答案 1 :(得分:0)

尝试:如果你有相同的Input_file,如下所示的样本,那么下面也会帮助你。

while read a b c
do
    if [[ $c > 64512 && $c < 65535 ]]
    then
        echo $a $b $c
    fi
done < "Input_file"

答案 2 :(得分:0)

 awk ' $4 < 64512  && $4 > 65535 ' sample.txt

$ 4 - 需要检查的第四个字段大于64512且小于65535,不打印这些行..

答案 3 :(得分:0)

awk '$3<33424' file

20170101|1.0.136.0/24|2497 38040 28969
20170101|1.0.137.0/24|2497 38040 33423
20170101|1.0.139.0/24|2497 38040 10136