根据awk中的多个列值删除行

时间:2018-01-28 09:47:05

标签: shell awk sed

我试图使用awk从我的文本文件中删除基于第4列值的行等于7和小于30的第5列值。

这是我的文字文件

1 1 2017 7 00 00 95.197469 112.803277    
1 1 2017 7 05 00 94.139040 113.255244  
1 1 2017 7 10 00 93.084220 113.715022  
1 1 2017 7 15 00 92.033141 114.182867  
1 1 2017 7 20 00 90.985940 114.659045  
1 1 2017 7 25 00 89.500772 115.143830  
1 1 2017 7 30 00 88.574990 115.637504  
1 1 2017 7 35 00 87.614221 116.140360  
1 1 2017 7 40 00 86.633495 116.652701  
1 1 2017 7 45 00 85.642547 117.174839  
1 1 2017 7 50 00 84.647055 117.707097  
1 1 2017 7 55 00 83.650410 118.249809  
1 1 2017 8 00 00 82.654745 118.803319  
1 1 2017 8 05 00 81.661486 119.367982  
1 1 2017 8 10 00 80.671646 119.944164  
1 1 2017 8 15 00 79.685987 120.532243  
1 1 2017 8 20 00 78.705118 121.132609  
1 1 2017 8 25 00 77.729550 121.745662  
1 1 2017 8 30 00 76.759731 122.371816  
1 1 2017 8 35 00 75.796072 123.011494  
1 1 2017 8 40 00 74.838956 123.665132  
1 1 2017 8 45 00 73.888755 124.333179  
1 1 2017 8 50 00 72.945832 125.016092  
1 1 2017 8 55 00 72.010551 125.714342  
1 1 2017 9 00 00 71.083276 126.428408  

4 个答案:

答案 0 :(得分:1)

使用awk:

awk '$4!=7 || $5>=30 {print}' file

输出:

1 1 2017 7 30 00 88.574990 115.637504  
1 1 2017 7 35 00 87.614221 116.140360  
1 1 2017 7 40 00 86.633495 116.652701  
1 1 2017 7 45 00 85.642547 117.174839  
1 1 2017 7 50 00 84.647055 117.707097  
1 1 2017 7 55 00 83.650410 118.249809  
1 1 2017 8 00 00 82.654745 118.803319  
1 1 2017 8 05 00 81.661486 119.367982  
1 1 2017 8 10 00 80.671646 119.944164  
1 1 2017 8 15 00 79.685987 120.532243  
1 1 2017 8 20 00 78.705118 121.132609  
1 1 2017 8 25 00 77.729550 121.745662  
1 1 2017 8 30 00 76.759731 122.371816  
1 1 2017 8 35 00 75.796072 123.011494  
1 1 2017 8 40 00 74.838956 123.665132  
1 1 2017 8 45 00 73.888755 124.333179  
1 1 2017 8 50 00 72.945832 125.016092  
1 1 2017 8 55 00 72.010551 125.714342  
1 1 2017 9 00 00 71.083276 126.428408

答案 1 :(得分:0)

解决方案1: 如果要打印第5列小于30且第4列不等于7的行,则可能会有以下帮助。

select to_clob('yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyuuuyyyyyyyyyyyyyyy')
    || to_clob('yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
')  a
from dual;

解决方案第二: 如果您要打印第5列大于30的第4列不等于7,那么以下内容可能有所帮助。

awk '$4!=7 && $5<30'  Input_file

答案 2 :(得分:0)

也许更简洁awk

删除第4行等于7 字段5 <30>

的行

$ awk '!($4==7 && $5<30)' case_file_48485025

输出

1 1 2017 7 30 00 88.574990 115.637504  
1 1 2017 7 35 00 87.614221 116.140360  
1 1 2017 7 40 00 86.633495 116.652701  
1 1 2017 7 45 00 85.642547 117.174839  
1 1 2017 7 50 00 84.647055 117.707097  
1 1 2017 7 55 00 83.650410 118.249809  
1 1 2017 8 00 00 82.654745 118.803319  
1 1 2017 8 05 00 81.661486 119.367982  
1 1 2017 8 10 00 80.671646 119.944164  
.
.

工作原理

  • 默认情况下awk如果看到非零值作为其命令
  • ,则会打印一行
  • !($4==7 && $5<30)会在满足您的条件时评估为零,因此awk不会打印。

答案 3 :(得分:0)

这可能适合你(GNU sed):

sed '/^.........7.[0-2]/d' file

删除第4列中7的行,02作为第5列的第一个字符。